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;
}
我仍然需要閃爍ALOT。但如果我工作。我想我可以讓它做我想做的事。
如果出現這種情況太顛簸,你可以記錄的X值幾個以前幀和平均/過濾它們以提供更平滑的效果。 – CookieOfFortune 2010-01-04 18:14:31
我將不得不考慮這一點。是的,我想我會設置一個計時器,將發射一個事件這麼多x毫秒來記錄距離。我很好奇知道那裏是否有任何吸引人的公式。如果沒有,我可能會用我的鼠標的速度,只是減去球的vx。 – numerical25 2010-01-04 18:17:39
爲了擴大CookieOfFortune的說法,數字濾波器可能是平滑它的最簡單方法。這裏有一個簡單的低通濾波器:v = f * input +(1-f)* v。f在0和1之間.f的值越大,濾波越少。 – 2010-01-04 19:29:35