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文件。你应该理解所有这些必要的内容。

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

【今日回顾】

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

目录
相关文章
星际争霸之小霸王之小蜜蜂(十三)--接着奏乐接着舞
星际争霸之小霸王之小蜜蜂(十三)--接着奏乐接着舞
|
4月前
|
存储 API 图形学
Unity精华☀️二、到底是什么原因导致“万向锁”?旋转翻车的终极解析!
Unity精华☀️二、到底是什么原因导致“万向锁”?旋转翻车的终极解析!
|
4月前
|
存储 JSON 数据可视化
python实战|1000位小姐姐照制作照片墙,刷新你三观的颜值!
python实战|1000位小姐姐照制作照片墙,刷新你三观的颜值!
43 2
|
7月前
|
C# 图形学
【Unity】2D游戏-愤怒的小鸟教学实战(附源码和实现步骤 超详细)
【Unity】2D游戏-愤怒的小鸟教学实战(附源码和实现步骤 超详细)
395 2
|
7月前
|
图形学
【Unity 3D】3D游戏跑酷小子实战教学(附源码和步骤 超详细)
【Unity 3D】3D游戏跑酷小子实战教学(附源码和步骤 超详细)
314 0
|
7月前
|
容器
塔防游戏开发实战教程(1):实现防守塔,添加敌人的路径点
塔防游戏开发实战教程(1):实现防守塔,添加敌人的路径点
127 0
|
Python
通过游戏学Python系列之小兔要上天---手把手教你使用Pygame开发平台跳跃类游戏02之物体运动
通过游戏学Python系列之小兔要上天---手把手教你使用Pygame开发平台跳跃类游戏02之物体运动
131 0
|
Java
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏21之enemy行走和死亡动画效果
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏21之enemy行走和死亡动画效果
183 0
|
Java
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏12之英雄自由行走
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏12之英雄自由行走
170 0