NESASM教程——第九天——运动的主角

简介:

【啥?】

今天不是教程,更像是前天留的作业的解决方案,即用手柄控制主角运动。我相信我们实际上已经掌握了所有必要的技能。下面给出完整代码。

【代码】

	;;--- 代码开始 ---;;
	.inesprg 1
	.inesmap 0
	.inesmir 1
	.ineschr 1

	.bank 1     
	.org $FFFA
	.dw 0        ; 
	.dw Start    ; 复位向量
	.dw 0        ; 

	.bank 0
	.org $0000
X_Pos   .db 20       ; 主角X坐标
Y_Pos   .db 20       ; 主角Y坐标

	.org $8000  ; 
Start:

	lda #%00001000  ;
	sta $2000       ; 
	lda #%00011110  ; 典型的PPU设置代码
	sta $2001       ; 

	ldx #$00    ; 清零X            ;; 开始载入调色板

	lda #$3F    ; 
	sta $2006   ; 
	lda #$00    ; 
	sta $2006

loadpal:                ; 
	lda tilepal, x  ; 
	sta $2007       ; 
	inx             ; 
	cpx #32         ; 
	bne loadpal     ; 
	                                ;; 载入调色板结束

infinite:  ; 死循环
waitblank:         
	lda $2002  ; 
	bpl waitblank ; 等待VBlank

	lda #$00   ; 开始写SPR-RAM
	sta $2003  ; 
	lda #$00   ; 
	sta $2003  ; 

	lda Y_Pos  ; 
	sta $2004 ; 纵坐标

	lda #$00  ; 
	sta $2004 ; tile编号0

	lda #$00 ; 
	sta $2004 ;

	lda X_Pos  ;
	sta $2004 ; 横坐标
	; 务必注意顺序
	
	lda #$01   ; 
	sta $4016  ;
	lda #$00   ;
	sta $4016  ; 设置/选通手柄

	lda $4016  ; A
	lda $4016  ; B
	lda $4016  ; Select
	lda $4016  ; Start
	lda $4016  ; UP
	and #1     ; 
	bne UPKEYdown  ; 
	;如果按下“UP”,跳转到UPKEYdown
	
	lda $4016  ; DOWN 
	and #1     ; 
	bne DOWNKEYdown

	lda $4016  ; LEFT 
	and #1     ; 
	bne LEFTKEYdown

	lda $4016  ; RIGHT 
	and #1     ; 
	bne RIGHTKEYdown
	jmp NOTHINGdown  ; 没有按键按下,跳到NOTHINGdown
	

UPKEYdown:
	lda Y_Pos ; 将Y坐标载入A
	sbc #1  ; 减1
	sta Y_Pos ; 保存
	jmp NOTHINGdown  ; 处理结束

DOWNKEYdown:
	lda Y_Pos 
	adc #1  ; Y坐标加1
	sta Y_Pos
	jmp NOTHINGdown ; 

LEFTKEYdown:
	lda X_Pos
	sbc #1  
	sta X_Pos
	jmp NOTHINGdown 
;左键按下,X坐标减1

RIGHTKEYdown:
	lda X_Pos
	adc #1
	sta X_Pos
	; 右键按下,X坐标加1

NOTHINGdown:
	jmp infinite

tilepal:   .incbin "our.pal"  ; 

	.bank 2
	.org $0000
	.incbin "our.bkg"
	.incbin "our.spr"

;;--- 代码结束 ---;;

希望你还保存着第五天的our.pal, our.bkg, our.spr文件。你应该理解所有这些必要的内容。

注意:在一些模拟器上你可能得按下好几次按钮,主角才出现。我不知道为啥。

【今日回顾】

感谢那些发给我运动主角代码的人,至少我知道有人读了我的教程。

目录
相关文章
|
1月前
|
前端开发 JavaScript Linux
【好玩的开源项目】在Linux系统下部署 star-battle太空飞船射击小游戏
【2月更文挑战第10天】在Linux系统下部署 star-battle太空飞船射击小游戏
82 3
|
6月前
|
索引 Python
星际争霸之小霸王之小蜜蜂(七)--消失的子弹
星际争霸之小霸王之小蜜蜂(七)--消失的子弹
|
9月前
|
人工智能 安全 JavaScript
模拟“嫦娥五号”探月小游戏【附源码】
在实际的探月过程中,这些操作都是由程序精确测量和控制的。而在这个游戏里,则需要玩家手动完成 降落 和 上升对接 这两个操作。
|
6月前
|
Python 容器
星际争霸之小霸王之小蜜蜂(六)--让子弹飞
星际争霸之小霸王之小蜜蜂(六)--让子弹飞
|
6月前
|
存储
星际争霸之小霸王之小蜜蜂(八)--蓝皮鼠和大脸猫
星际争霸之小霸王之小蜜蜂(八)--蓝皮鼠和大脸猫
|
11月前
|
Python
通过游戏学Python系列之小兔要上天---手把手教你使用Pygame开发平台跳跃类游戏02之物体运动
通过游戏学Python系列之小兔要上天---手把手教你使用Pygame开发平台跳跃类游戏02之物体运动
92 0
|
11月前
|
Python
通过游戏学Python系列之小兔要上天---手把手教你使用Pygame开发平台跳跃类游戏06之死亡后游戏重新开始
通过游戏学Python系列之小兔要上天---手把手教你使用Pygame开发平台跳跃类游戏06之死亡后游戏重新开始
139 0
|
11月前
|
Python
通过游戏学Python系列之小兔要上天---手把手教你使用Pygame开发平台跳跃类游戏03之重力及碰撞检测
通过游戏学Python系列之小兔要上天---手把手教你使用Pygame开发平台跳跃类游戏03之重力及碰撞检测
127 0
|
11月前
|
传感器 开发框架 网络协议
羡慕《钢铁侠》电影里科技感满满的全息手势交互吗?现在你也可以!试试这款【本地手势识别案例】
羡慕《钢铁侠》电影里科技感满满的全息手势交互吗?现在你也可以!试试这款【本地手势识别案例】
151 0
|
前端开发 JavaScript
2023跨年烟花(浪漫烟花+美妙音乐+雪花飘飘)含前端源码直接下载---系列最终篇
2023跨年烟花(浪漫烟花+美妙音乐+雪花飘飘)含前端源码直接下载---系列最终篇
416 0
2023跨年烟花(浪漫烟花+美妙音乐+雪花飘飘)含前端源码直接下载---系列最终篇