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