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

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

【今日回顾】

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

目录
相关文章
|
6月前
|
Python 容器
星际争霸之小霸王之小蜜蜂(六)--让子弹飞
星际争霸之小霸王之小蜜蜂(六)--让子弹飞
|
6月前
|
存储
星际争霸之小霸王之小蜜蜂(八)--蓝皮鼠和大脸猫
星际争霸之小霸王之小蜜蜂(八)--蓝皮鼠和大脸猫
|
11月前
|
小程序
想做个炫酷的飞行射击游戏,研究这个就够了
不久我上线了一款彩虹星球大冒险的小游戏,是一个飞行射击游戏,效果还挺不错的。有不少朋友问这个飞行射击游戏有没有模版,想通过模版学习一下其中的一些实现方法。 今天,飞行射击游戏的模版来了,长按识别下方的小程序码可直接体验。
89 0
|
11月前
|
Python
通过游戏学Python系列之小兔要上天---手把手教你使用Pygame开发平台跳跃类游戏02之物体运动
通过游戏学Python系列之小兔要上天---手把手教你使用Pygame开发平台跳跃类游戏02之物体运动
92 0
|
11月前
|
Python
通过游戏学Python系列之小兔要上天---手把手教你使用Pygame开发平台跳跃类游戏03之重力及碰撞检测
通过游戏学Python系列之小兔要上天---手把手教你使用Pygame开发平台跳跃类游戏03之重力及碰撞检测
127 0
|
11月前
|
Java
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏12之英雄自由行走
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏12之英雄自由行走
121 0
|
11月前
|
Python
通过游戏学Python系列之小兔要上天---手把手教你使用Pygame开发平台跳跃类游戏04之跳跃
通过游戏学Python系列之小兔要上天---手把手教你使用Pygame开发平台跳跃类游戏04之跳跃
106 0
|
11月前
|
Python
通过游戏学Python系列之小兔要上天---手把手教你使用Pygame开发平台跳跃类游戏06之死亡后游戏重新开始
通过游戏学Python系列之小兔要上天---手把手教你使用Pygame开发平台跳跃类游戏06之死亡后游戏重新开始
139 0
|
11月前
|
Java
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏21之enemy行走和死亡动画效果
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏21之enemy行走和死亡动画效果
147 0
|
11月前
|
Java
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏13之英雄不要走出屏幕
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏13之英雄不要走出屏幕
108 0