WPF game developing 学习备注3--精灵用到的技术

我首先想到的是深蓝色右手。右手大侠的思维习惯,我可能跟不上。

所以down了本Learning.XNA.3.0,以前看过点,觉得比较亲切。翻了下似乎也没耐心看具体的文字。

不过我很乐意把书中的gameloop的图放上来。

另外书中的关于sprite的目录还是值得一列

1.添加一个sprite到项目中  “qs就是一张图片或者一组图片”

2.加载和显示sprite  “”

3.透明化等  “”

4.显示层次  “”

5.如何移动sprite “修改图片的位置,然后再新的位置显示出来”

6.精灵动画  “多张图片的显示”

7.调整帧率  “整个游戏的循环速度,注意是整个游戏的。”

8.动画速度  “单个sprite的动画速度。”

 

综合考虑上面8点,结合右手等人的资料。sprite的概念算是比较清晰起来。

 

sprite=“有一个canvas,显示外观,有一段logic决定自己的外观和行为,有一个listener接受外部信号”

 

sprite应该继承自canvas,这样显示就不是问题。只要在自己的canvas上重画就好了。

如果继承自object,则要考虑把sprite的内容在某一个canvas中画出来。可能不方便。

 

考虑下面一个命令“1。移动到坐标 40,100处,2。向左转 3。跑起来 4。我玩完了。”

 

sprite的关键问题1是如何接受信号。其实是整个游戏怎么处理用户输入的问题。如果每个精灵都能正确的接受到自己的信号。剩下的就是刷新问题了。

思路是1“统一接收外部信号,然后根据状态,决定信号的目标”,2“每个sprite自己能接收信号”

 

游戏循环要处理每个sprite,所以得有一个spriteManager管理所有的sprite,这样用一个for循环就可以出来所有的sprite了。

 

sprite的动作完成需要一段时间,如何合理的分配时间呢?总不能等一个sprite做完杀人的动作,另一个sprite才“啊的一身,然后慢慢倒地” 这个显然就是帧率要处理的,每个循环,每个sprite只能处理一个帧的内容。如何做到呢?简单的来考虑。命令spriteA和B从不同的位置移动到C点,不能是A移动到C,然后B移动到C,

因此sprite需要记录当前的动作,以及是否完成。然后给每个sprite一个时间片做自己的事情。现在的问题是sprite的时间片如何实现?

显然应该给每个sprite一个线程,按照我们的程序基础,只有这样才能控制时间片。让这个线程开启,执行一个帧的时间,结束它,刷新结果。

综上所诉,一个sprite应该是这个样子

 

sprite:canvas

{

  property1。。n

  state1。。n

  animationSpeed

  execute :thread(lasttime=50ms),lasttime根据framerate决定,framerate可以根据sprite和画质来决定。

  update:redraw the canvas

  command[] may push more than one action.

  commandIndex :current action。

  appearance[] :is a set of images

  load appearance[]: can be called when a sprite is created or dynamicaly such as used in backgroudSprite.

}

 

到这里为止,我们还没有写过代码。下面是时候把这些东西做起来了。当然还得验证下上面的思路是否正确。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值