【啥?】
今天不是教程,更像是前天留的作业的解决方案,即用手柄控制主角运动。我相信我们实际上已经掌握了所有必要的技能。下面给出完整代码。
【代码】
;;--- 代码开始 ---;;
.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文件。你应该理解所有这些必要的内容。
注意:在一些模拟器上你可能得按下好几次按钮,主角才出现。我不知道为啥。
【今日回顾】
感谢那些发给我运动主角代码的人,至少我知道有人读了我的教程。