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 函数将为您提供“投掷”球的角度。为此,您将需要两个位置向量,例如我们将使用鼠标位置来确定球的位置。

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 向量中。在您的初始帧之后,您将需要提供某种阻尼和重力 - 这取决于您希望如何实现。

An alternative way to compute this is to use a sine wave to illustrate the path. You can see an example here: sinewave, this is easier initially but you will need to learn the concepts of vectors to deal with collisions such as what I showed above.

于 2012-08-10T08:41:54.853 回答