请教j2me台球游戏的算法

leafzhou78 2004-12-17 03:45:07
尤其是碰撞部分是如何实现的
...全文
362 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
leafzhou78 2005-01-07
  • 打赏
  • 举报
回复
ok 明白了
luckycat 2005-01-05
  • 打赏
  • 举报
回复
前几天才做的,大致思想是这样的。把台球桌划分为16个区域。用二维数组记录每个球的位置。
每一贞重绘图像之前要做的事情有:找到所有运动的球,比如说2,5,7三个球在这一贞中是运动的,其他的球是静止的,并且这三个球的速度(这里指一帧要走屏幕多少个像素)分别为10,20,30,则7号球的速度为最大速度,从0-30按象素逐点移动7号球并检测是否会碰到别的球,同时7号球每移动1.5个像素(MIDP1.0不支持小数,可以粗略认为是2个像素)则5号球移动一个像素并检测5号球的碰撞情况,7号球每移动3个像素,2号球移动一个像素并检测碰撞。如果7号球移动了30个像素都没有任何球发生碰撞,则这一贞结束,到下一贞。否则按照jinalone(何荣进) 的方法计算碰撞后的球的运动方向。注意:一贞中只要有一个碰撞发生,这一贞就结束。
是否碰撞是这样判断的:每个球在每贞的初始状态时,他们所在的区域位置(就是前面提到的把台球桌划分为16个区域)会被记录到一个数组中。检测碰撞时只检测是否与本区域中的球发生碰撞,如果此区域是靠近台球桌的区域,还要检测是否与台球桌发生碰撞或是落入袋中。
我自己做的游戏就是采用这个思路的,速度还可以,击球路线也较准,当然MIDP1.0不支持浮点数,所有坐标放大10000倍做的,自己做的四舍五入,不然路线就不准了
A_KID 2005-01-05
  • 打赏
  • 举报
回复
www.gamedev.net上有不少研究pool算法的,偶从来没看过:) 头大
zy13 2004-12-30
  • 打赏
  • 举报
回复
帮忙顶,我也准备做一个台球的游戏哦
jinalone 2004-12-30
  • 打赏
  • 举报
回复
pool里的碰撞包括球与球的碰撞、球与球台的碰撞。总的来说碰撞就是预测未来帧—N,物体是否发生接
触,如果物体发生了接触则在第N-1帧做出反射动作。否则运动物体间会发生明显嵌入或粘连现象。
判断球与球之间是否发生碰撞非常简单,只要检测空间两点的距离是否小与球的直径便可。
假设两球是完全弹性碰撞,向量t为两球心间的连线,n是垂直于MO的向量。则v1在t上的分量v1t
与v2在t上的分量v2t 动量守恒,由于两球质量相同~联立动能守恒公式可得:碰撞后两球的速度在
t上的分量被交换。而在n方向上v1n,v2n 将保持不变。最后把v1t、v1n、 ,v2t、v2n 分别沿x轴y轴投影对应合成后即可得到两球碰撞后的速度。
(本来有图是很容易解释的,但我不知道这里可不可以贴图。)
球与球之间的碰撞其实不是太复杂的只是用基本的物理公式就是计算到出来。相对于球与球台的碰撞还是相对简单的,因为球台的边会是一个不规则的形状所以做起来会比较难一点。

HelloWorldd 2004-12-30
  • 打赏
  • 举报
回复
yiboo(bboonnee):

建议查找相关游戏和图形学书籍,关于碰撞算法的
跟J2ME的游戏API没关系拉

j2me的game api专门提供了碰撞处理的!
bboonnee 2004-12-29
  • 打赏
  • 举报
回复
建议查找相关游戏和图形学书籍,关于碰撞算法的
跟J2ME的游戏API没关系拉
HelloWorldd 2004-12-29
  • 打赏
  • 举报
回复
如果是MIDP2.0,用game api 实现比较方便:
1.用javax.microedition.lcdui.game.Sprite 类实现台球动画本身.
2.用javax.microedition.lcdui.game.TiledLayer 类实现.
3.用javax.microedition.lcdui.game.LayerManager 类实现对1,2步骤中图像的管理,别忘了Sprite和 TiledLayer都是Layer的子类.
4.依此类推,不同的属性放在不同的Layer里,如球杆,然后统一用LayerManager 进行管理.
5.有了上面的基础,碰撞就好实现了
比如,1中实现了ball,2中实现了table而且你用LayerManager管理了(manager.append(ball); manager.append(table).
比如你想判断球是否触到了桌边(当然细说来台布和桌沿可能要放在不同的图层,信手写的,只表达一个意思)

if (ball.collidesWith(table, true)) {
//做你想做的事
}

其余类推.

随手写的,可能遗漏较多,供参考.
pqds 2004-12-29
  • 打赏
  • 举报
回复
碰撞在2.0中是由sprite类中的swide??with(好像是)这个方法来实现的!
将你的台球声明成sprite,就直接可以用里面的这个方法了!
有象素和矩形两种真测模式。
也可以image to sprite
layerManager to sprite
sprite to sprite
yjawal8071 2004-12-21
  • 打赏
  • 举报
回复
也想知道
學習ing
redex 2004-12-20
  • 打赏
  • 举报
回复
帮你up.
zzzxxxcccvvv 2004-12-20
  • 打赏
  • 举报
回复
...
batfree 2004-12-19
  • 打赏
  • 举报
回复
如果是在MIDP2.0中,碰撞是可以检测到的,如果是MIDP1.0,只能够自己写算法了。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧