2D飞机游戏的弹幕和碰撞设计
我要吐血了,好不容易完成在3D下面用sprite渲染2D,现在又来了。。。
弹幕咋办?难道要边添加到链表,然后再像粒子系统那样,一次性绘制N个?如果这样,碰撞又是个问题!
如果加到链表,在for循环一个个绘制出来,这个可以吗?但总感觉要拖累速度,总要经过渲染管线。。但是这样碰撞相对简单点,毕竟数量有限,不过两个光检测主角是否中弹复杂度就达到O(n),如果是敌机再多点,在需要一个链表去保存,在和主角[来源:GameRes.com]的子弹去碰撞检测,至少得O(n*n)。。当然我这里假设的还是使用矩形碰撞。。
顺便问问,出了矩形碰撞,在STG游戏中还有什么别的好点的碰撞检测吗?
http://bbs.gameres.com/showthread.asp?threadid=105982
这个帖子的弹幕就是我想要的效果,但。。他的却一点不卡。
所以来求助各位大大!
如果有示例的代码,就更好了!谢~
[解决办法]
你可以联系那个游戏的作者 请教。。。
[解决办法]
你的游戏跑在几十MHz的机器上么……
[解决办法]
你的敌机也会被敌机子弹击毁么?怎么得出了O(n^2)?
[解决办法]
自机会被敌机和敌机子弹击毁,所以把敌机和敌机子弹属性组织到一起为一条链表。
敌机会被自机子弹击毁,所以把自机子弹属性组织到一起为一条链表。
敌机的某些子弹会被自机子弹击毁,所以把敌机可被击毁子弹组织到一起为一条链表。
设自己子弹数为m,敌机数量为n,敌机可被击毁子弹为j,敌机不可被击毁子弹为k。则BigO为:
O(m*n)+O(n+j+k)+O(m*j)
你觉得碰撞运算量大么?
绘制,要把同样的子弹组织成批,这样效率高,没错。有几种子弹,就组成几条绘制链表呗。
同一个子弹,完全可以加到多条链表中。
[解决办法]
不过是3年前的作品了。作者也不一定健在
我艹,楼主威武......
[解决办法]
碰撞检测的代价没有你想象的那么高, 有很多办法可以加速碰撞检测的
相反sprite绘制那么多的效果的代价更高
2d和3d不同, 2d的效果只是一个图的复制而已, 3d下粒子系统那个玩意用的太多消耗就太大了
[解决办法]
碰撞处理不要用包围盒一个个和飞机比较,不然没效率 用map大法
把地图划分为NXN的格子 然后看看那些子弹是跟自己的飞机在一个格子里的 之后再@#$@%…… 你懂的
[解决办法]
弹幕用数学公式,比如cos和sin就行。
至于碰撞,要精确一点的可以弄成多个三角形的。