1

ああ、またお邪魔してすみません、AS3 のコーディングを始めるのがこれほど難しいとは想像もしていませんでした (最初は簡単でしたが、今は心がブロックされています)。希望の速度と角度でマウスを動かします。ジェットの例を取り上げましたが、おそらく正しく実装していません。コードは次のとおりです。私が達成しようとしていることを説明します

import flash.geom.Point;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.display.MovieClip;
// here I added a custom cursor to my mouse (it’s an aim in png format)
var cursor:MovieClip;
function initializeGame():void
{
cursor = new Cursor();
addChild(cursor);
cursor.enabled = false;
Mouse.hide();
stage.addEventListener(MouseEvent.MOUSE_MOVE, dragCursor);

}

function dragCursor(event:MouseEvent):void
{
cursor.x = this.mouseX;
cursor.y = this.mouseY;
}

initializeGame();
var mouse=this.Mouse;

// here I want to make the player  (called kicker) to kick the ball
stage.addEventListener(MouseEvent.CLICK, kick);

function kick(evt:Event){

kicker_mc.play(); // here I animate the kicker movieClip

this.addEventListener(Event.ADDED, moveBall);// this is the function that will move     the ball towards the goal

}

//And here unsuccessfully trying to make the ball start moving to the cursor position,     (currently when I kick the ball it appears at the right upper corner of the swf, exactly where the cursor appears when movie is tested

var speed:Number;
var angle:Number;
speed=200;
angle = Math.atan2(mouse.y-bola.y, mouse.x-bola.x);

function moveBall (event:Event){

ball.x += Math.cos (angle) * speed;
ball.y += Math.sin (angle) * speed;


}

もう一度、私は本当にあなたの指導に感謝します

古い質問

AS3 を使用してサッカー ペナルティー シュートアウト ゲームの作成を開始しましたが、ボールが蹴られたときにボールに速度と方向を与えるのに問題があり、プレーヤーにボールを蹴らせることができませんでした (はい、私は開発者ではありませんが、ゲームを完了するために懸命に努力してきました)、プレーヤーのアニメーションがキックをシミュレートしている間、3.5秒後にボールをゴールに移動できるようにする関数に遅延を設定することができました。これはコードです:

kick_btn.addEventListener(MouseEvent.CLICK, kick);

function kick(evt:Event)
{
    kicker_mc.play();

    new delayedFunctionCall (myFunctionToStartLater, 350);

    function myFunctionToStartLater():void
    {    
        ballkicked();
    }
}

function ballKicked(event:Event)
{
    ball_mc.y=180;
}

ここで、ボールを別の位置に移動しているだけであることを確認しますが、関数 ballkicked(); でゴールキーパーにボールを投げたいと考えています。ここで、シュートがゴールになるようにボールに実際の動きを与えたいところです。方向と速度を与えるために三角法を使用する必要があることはわかっていますが、三角法は非常に複雑なようです。チュートリアルに従っていましたが、いくつかの変数とパラメータしか準備できませんでしたが、迷子になりました:

var xSpeed:Number;
var ySpeed:Number;
var angle:Number;
var speed:Number;

これは関数に行く必要があります:

angle = this.rotation / 180 * Math.PI;
xSpeed = Math.cos(angle) * speed;
ySpeed = Math.sin(angle) * speed;

私はあなたの忍耐とこれに対する助けに本当に感謝します. どうもありがとう

4

1 に答える 1

1

atan2関数は、ボールを「投げる」角度を与えます。これを行うには、2つの位置ベクトルが必要です。たとえば、マウスの位置をボールの位置に使用します。

angle = atan2(mouse.y-ball.y, mouse.x-ball.x)

y座標が最初に使用されることに注意してください。これにより、ボールを前方に進めることができる番号が得られます。

ball.x += cos(angle)*speed
ball.y += sin(angle)*speed

これにより、ボールがマウスのある場所に向かって移動します。ただし、地面に近い角度を湾曲させることにより、重力を考慮する必要があります。地面にぶつかったら、速度を下げてベクトルのyを反転させるだけです。

*追加の加速度ベクトルを使用すると便利な場合があります。* これを使用すると、上記で示したのと同様に加速度ベクトルを設定できます。

//same as above
ball.accx += cos(angle)*speed
ball.accy += sin(angle)*speed

最初は。次に、このベクトルをすべてのフレームのposベクトルに追加します。最初のフレームの後で、ある種の減衰と重力を提供する必要があります。これは、どのように実装するかはあなた次第です。

これを計算する別の方法は、正弦波を使用してパスを示すことです。ここに例を見ることができます:正弦波、これは最初は簡単ですが、上で示したような衝突に対処するためのベクトルの概念を学ぶ必要があります。

于 2012-08-10T08:41:54.853 に答える