100分求助球碰撞杯子算法

zhang342088044 2009-07-29 10:01:48
正在做一个游戏,球从地上弹上去之后可能碰到杯子,球为变速运动,可能碰到杯子的内外壁。求检测算法。
我写的bug太多了,求修改或可以用的。
已知球半径r。杯子的宽width、高height、厚度thick。
可以计算球的坐标ball.x和ball.y杯子的坐标cup.x和cup.y。
这是我的球运动轨迹计算公式。给它一个速度v。算出单位时间的位移dx和dy。然后计算新的坐标x,y。
dx=v*cos;
x=x+dirx*dx;
dy=v*sin-10*T;
y= y-(v*sin*diry-10*T);
dx和dy可以代表每个单位时间的位移。如果水平方向碰到障碍物(如:杯子),则T=0,dirx=-0.5dirx,diry=0。这样竖直方向以重力加速度下降,水平方向速度反向,大小减为一半,就可以反向减速运动。如果竖直方向只有水平方向碰撞,则把竖直方向速度置零,以重力加速度下降。水平速度不变。知道接触地面。

由于球是变速运动,所以有时检测到碰撞时球已经运动过检测线了。所以要y=~~~~或者x=~~~来修正它的位置。
这下就到了与球的碰撞检测上了:

if(x>=cup.x&&x<=cup.x+Cup.width&&###########)//杯底内部
{
y=cup.y+Cup.height-Cup.thick-r;
state=GOAL_STATE;
}
if(x>=cup.x&&x<=cup.x+Cup.width&&##########) //杯外底部
{
y=cup.y+Cup.height+r;
diry=0;
T=0;
}
if(y>=cup.y&&y<=cup.y+Cup.height&&##########) ////杯内部左边
{
x=cup.x+Cup.thick+r;
dirx=-0.5dirx;
diry=0;
T=0;
}
if(y>=cup.y&&y<=cup.y+Cup.height&&##########)//杯外部左边
{
x=cup.x-r;
dirx=-0.5dirx;
diry=0;
T=0;
}
if(y>=cup.y&&y<=cup.y+Cup.height&&##########)//杯内部右边
{
x=cup.x+Cup.width-Cup.thick-r;
dirx=-0.5dirx;
diry=0;
T=0;
}
if(y>=cup.y&&y<=cup.y+Cup.height&&##########)//杯外部右边
{

x=cup.x+Cup.width+r;
dirx=-0.5dirx;
diry=0;
T=0;
}

求补全#########代表的判断碰撞代码。
谢谢。
...全文
121 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wormwormwormworm 2009-08-01
  • 打赏
  • 举报
回复
有意思
淡定别怂 2009-08-01
  • 打赏
  • 举报
回复
可以这样,在被子高度那个地方弄一个圆,只要球的圆心在这个圆里面的时候,这个球就可以调到杯子中,不在就掉不进去
zhang342088044 2009-08-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yetaodiao 的回复:]
this.onEnterFrame=function()
{
  if(bulletarea.hitTest(this._x,this._y,true))
  {
    checkcol(this)
  }
}
function checkcol(who)
{
  for(each in bulletarea){
  if(eval("bulletarea."+each).inbullet.hitTest(eval(who))){
    removeMovieClip(eval("area."+each));removeMovieClip(eval(who))
  }
  }
}
[/Quote]

说真的 ,你的程序 我看不懂,不过还要谢你。
zhang342088044 2009-08-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yangc_83 的回复:]
把杯子看成一个长方形,球看成一个圆
球的运动就是一条直线
判断,这条直线和长方形的四条边是否有碰撞.
PS:球在长方形内部的情况
[/Quote]

不好意思,我的球不是直线运动,是曲线运动。不过还是要谢谢你。
yangc_83 2009-07-31
  • 打赏
  • 举报
回复
把杯子看成一个长方形,球看成一个圆
球的运动就是一条直线
判断,这条直线和长方形的四条边是否有碰撞.
PS:球在长方形内部的情况
  • 打赏
  • 举报
回复
this.onEnterFrame=function()
{
if(bulletarea.hitTest(this._x,this._y,true))
{
checkcol(this)
}
}
function checkcol(who)
{
for(each in bulletarea){
if(eval("bulletarea."+each).inbullet.hitTest(eval(who))){
removeMovieClip(eval("area."+each));removeMovieClip(eval(who))
}
}
}
zhang342088044 2009-07-30
  • 打赏
  • 举报
回复
各位没人能帮帮我吗?
我想了 好久了。头都快爆了,总是出bug。
zl3450341 2009-07-29
  • 打赏
  • 举报
回复
脑壳疼

关注
knightzhuwei 2009-07-29
  • 打赏
  • 举报
回复
这是个物理问题嘛。。
lghndyz 2009-07-29
  • 打赏
  • 举报
回复
帮顶!!
阿士匹灵 2009-07-29
  • 打赏
  • 举报
回复
有时间琢磨琢磨
很有意思吧

呵呵

13,100

社区成员

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

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