首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NES(6502组件)精灵运动

NES(6502组件)精灵运动
EN

Stack Overflow用户
提问于 2015-10-20 03:24:22
回答 3查看 1.1K关注 0票数 2

我目前正在开发一款NES(6502)的汇编游戏,但我不知道如何进行精灵的移动。以下是我认为它应该是如何工作的:

代码语言:javascript
复制
(loop)
LDA $200 ;will load into the A register the content of address $200,wich contain the Y position of my sprite
INA ;Increment the A register which would increment the content of A which is the Y position of my sprite..?

但是,您似乎不能递增A寄存器累加器,因为我在尝试使用INA指令汇编时出错。所以我对此有点迷惑。是否应该使用STA而不是LDA?但我想使用地址的内容$200,而不是将我选择的值放在其中。我不知道怎么让我的精灵动起来。

EN

回答 3

Stack Overflow用户

发布于 2015-10-20 03:45:46

在NES中使用的6502的变体上确实没有可用的INA。您可以使用以下两对指令将A递增1:

代码语言:javascript
复制
CLC     ; Clear carry
ADC #1  ; A = A + 1 + carry = A + 1

或者,如果任何一个索引寄存器是空闲的,您可以使用:

代码语言:javascript
复制
LDX $200  ; or LDY
INX       ; or INY

但请记住,其他算术运算,如ADCSBCLSR等,不能在XY上执行。

票数 5
EN

Stack Overflow用户

发布于 2015-10-20 10:54:23

如果图形芯片在$200中查找精灵位置,那么您将需要在计算后写回修改后的值。如果您想做的只是递增它,您可以使用INC的绝对寻址模式直接执行:

代码语言:javascript
复制
INC $200

将递增存储在$200中的任何值,而不更改任何寄存器值。

票数 3
EN

Stack Overflow用户

发布于 2019-10-20 04:17:58

请记住,通常游戏不会直接编辑精灵。更新精灵位置的常见方法是首先更新对象的位置,然后使用精灵构造器子例程将每个8x8精灵组装到相对于对象位置的正确位置。你可以有一个表来列出所有的精灵。该列表指定了该精灵的瓦片和相对偏移量,因此您可以将其添加到对象位置,以获得您写入下一个空闲OAM插槽的精灵的位置。

然后,在NMI开始时,使用OAMDMA将“影子OAM”(通常在第2页)复制到PPU。游戏通常不使用OAMADDR和OAMDATA,因为它们可能会损坏OAM数据。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33222276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档