我正在制作乒乓球游戏。而且我希望能够根据对球拍的影响来控制球的方向。如果球在vy = 4时下降; vx = 4;
并且桨在vx = -5时向左移动;我希望球根据桨的移动速度稍微改变它的路线。这可能会减少碰撞时球的速度,因此当球向后移动时,球会更直(靠近Y轴)移动。但在我进行疯狂的试错之前,我想知道是否有人知道答案或者可能有任何消息来源。
我认为可能做到这一点的解决方案是测量球拍的速度。我的问题是桨由鼠标控制,没有一定的速度。我试图找出如何测量鼠标在x轴上行进的速度。
我可能会创建一个计时器,每隔几秒触发一次,以确定鼠标的位置和位置。计算差异,这将是速度
如果有人有任何答案,那就太好了。感谢
答案 0 :(得分:1)
测量球拍速度的最简单方法是在前一帧中保持球拍位置的缓存,因此通过使x - xPrev得到此帧的球拍运动的增量或相对值速度。
从那个速度你可以将它作为修正器(可能缩小)添加到球的反射矢量的x速度中。
现在这听起来像一个简单的游戏,帧率应该不是问题。但是,如果您想跟踪速度,可以通过访问前一帧的总时间来进行简单的物理计算。允许在时间上保持一致的行为,与模拟的帧速率无关。
答案 1 :(得分:0)
K,我想出了解决办法。仍然需要处理我的碰撞检测。不是最伟大的。我的球有时会卡在桨中。我正在使用flash对象命中测试。但无论如何。这是我用来获得它的代码,我希望它能做到。似乎它支持它有时会走的方向,有时它不会。
它可以工作,但问题是我在负面的速度,所以有时方向是关闭。因为球的移动方向由-1或1确定。如果我将速度降低到负值。它可能导致数字与其假设的数字相反。
以下是桨类
public var cspeed:Number;
private var timer:Timer;
public var vx:Number = 0;
public var vy:Number = 0;
private var prevx:Number = 0;
private var prevy:Number = 0;
public function Paddle():void
{
timer = new Timer(60);
timer.start();
timer.addEventListener(TimerEvent.TIMER,checkSpeed);
}
private function checkSpeed(e:TimerEvent):void
{
if(prevx == 0)
{
prevx = x;
}
else
{
cspeed = x - prevx;
prevx = 0;
}
}
我检查球类内的碰撞。因为它击中了一切。下面是代码
以下是我的球类。在检查墙类中,它检查它是否击中墙壁或桨。我把球拍的参考传给了球类。
private function checkWalls():void
{
if(y > sRef.stageHeight || y < 0)
{
yDir = yDir * -1;
}
else if ( x > sRef.stageWidth || x < 0)
{
xDir = xDir * -1;
}
//trace(dist);
/*var dx:Number = paddle.x - x;
var dy:Number = paddle.y - y;
var dist:Number = Math.sqrt(dx * dx + dy * dy);*/
if(hitTestObject(paddle))
{
xspeed = (paddle.cspeed/100) + xspeed;
yDir = yDir * -1;
}
//trace(paddle.cspeed);
}
private function moveBall():void
{
x += xspeed * xDir;
y += yspeed * yDir;
}
我仍然需要眨眼。但如果我继续努力我想我可以做到我想做的事。
答案 2 :(得分:0)
我能够解决这个问题。我发现在互联网上做了以下事情,物理学看起来更好。球仍不时卡在球拍内
从
更改了以下内容xspeed = xspeed + (paddle.cspeed/10);
到
xspeed = xspeed + ( paddle.cspeed * .4 );