注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

深夜是徘徊在潮湿睫毛上的我的梦以及他的梦

是直到最后都无法放手的一种气息,是我们生命中最后的思念……

 
 
 

日志

 
 

学移动一个图块  

2010-02-03 23:24:12|  分类: FC教程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

维京猎人

 

学移动一个图块

有两种方式,一种叫移动背景图块,指单个图块,不是整个背景

另一种叫移动精灵

----------------------------------
1 先学第一种:移动背景图块

会用背景方式显示图块吗?

会 

太好了,那么你知道只要:

在原图块在背景上的地址上显示一个空白的tile。
另外在要移动的方向上显示这个图块,视觉上就是移动这个图块,这是背景方式。


例如

tile 0是一个空白的图块。
tile 1是要移动的图块

tile 1所在的背景上的地址是QP,,,(Q是高位地址,P是低位地址)

想要向左移动(暂不理会边界问题)
代码
set $2006 Q
set $2006 P
set $2007 0
set sub2_nh Q
set sub2_nl P
set sub1_nh 0
set sub1_nl 1
gosub sub16
;//向左就是减1
set $2006 Q
set $2006 P
set $2007 1
set $2005 0
set $2005 0

重复上面这个过程就是不停向左走了。

向上移动就是减$20  (注意这是16进制的$20)
将 set sub1_nl 1
改成
set sub1_nl $20
-------------------------------------

向右移动只要做一些小改动,改成加1
代码
set $2006 Q
set $2006 P
set $2007 0
set add2_nh Q
set add2_nl P
set add1_nh 0
set add1_nl 1
gosub add16
;//向右就是加1
set $2006 Q
set $2006 P
set $2007 1
set $2005 0
set $2005 0

重复上面这个过程就是不停向右走了。

向下移动就是减$20
将 set add1_nl 1
改成
set add1_nl $20


----------------------------------
以上是背景显示方式下移动一个图块,这个其实比较难的。因为每移动一次,一定要在vblank期间进行,或

是在中断里进行。否则会闪屏。

为什么要上下移动要加减$20(=32),因为背景方式是用地址表示的,而一行有32个图块即32个地址。

这里面用到了两个子程序

就是16位的加减法子程序。
    nh 表示高位  ,,  nl 表示低位  用2个8位数来表示1个16位数


加法
说明 add2_nh add2_nl = add1_nh add1_nl + add2_nh add2_nl

     把一个加数表示高位的数放入add1_nh,表示低位的数放入add1_nl。另一个加数的高位和低位分别放入

add2_nh,add2_nl
     而计算结果将会放到add2_nh,add2_nl中

代码
add16:
 asm
  lda add1_nl
  clc
  adc add2_nl
  sta add1_nl
  lda add1_nh
  adc add2_nh
  sta add1_nh
 endasm
 return


减法
说明 sub2_nh sub2_nl = sub1_nh sub1_nl - sub2_nh sub2_nl

    跟加法是相似的,略

代码
sub16:
 asm
  lda sub1_nl
  sec
  sbc sub2_nl
  sta sub1_nl
  lda sub1_nh
  sbc sub2_nh
  sta sub1_nh
 endasm
 return

这个必须用汇编来写,NB是写不了的。不理解的话,会用就行。

----------------------------------
2 再来学第二种:移动精灵图块

这个就简单了,精灵的显示(略去)

只要修改坐标就能移动了。

例如

tile 0是一个空白的图块。
要移动一个精灵的编号是10,坐标是(x,y),属性取0,tile=1


代码
set $2003 10
set $2004 y
set $2004 0 ;//就是这个为tile
set $2004 0 ;//这个是属性
set $2004 x
set x + x 1  ;//x=x+1
set $2003 10
set $2004 y
set $2004 1 ;//就是这个为tile
set $2004 0 ;//这个是属性
set $2004 x

重复上面这个过程就是不停向x+的方向去了,我猜是向右,,哈哈,自己试验吧
要是将set x + x 1
改成
set x - x 1
或set y + y 1
或set y - y 1
就是向另外那3个方向了,试试吧


-------------------
ok就是这么简单,你会了吧

我上回写的那个移动一个字母,就是用精灵方式移动的,比较看看吧

  评论这张
 
阅读(677)| 评论(5)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017