您的位置:首页 > 其它

一个问题求解

2012-11-02 19:19 197 查看
package {

import flash.display.*;

import flash.events.*;

public class TargetPractice extends MovieClip {

// movie clips

private var ball:Ball;

private var ballShadow:BallShadow;

private var target:Target;

private var cannonRings:Array;

// cannon position and angle//大炮的位置和角度

private var cannonPosition:Number;

private var cannonAngle:Number;

// ball vector//球的矢量

private var dy,dz:Number;

public function TargetPractice() {

// set up all movie clips//建立所有影片剪辑

target = new Target();

ball = new Ball();

ballShadow = new BallShadow();

ballShadow.rotationX = -90; // rotate shadow to lie down on surface//翻转阴影躺在表面

ballShadow.y = 350; // shadow on the ground//地上的影子

addChild(ballShadow);

addChild(target);

addChild(ball);

// create 10 rings to show cannon direction//创建10个环指炮方向

cannonRings = new Array();

for(var i=0;i<3;i++) {

var cannonRing:CannonRing = new CannonRing();

cannonRings.push(cannonRing);

addChild(cannonRing);

}

// set initial cannon position and angle//设置初始大炮的位置和角度

cannonAngle = -30;

cannonPosition = 275;

drawCannon();

// set up first target//建立了第一个目标

setUpTarget();

// accept keyboard input//接受键盘输入

//stage.addEventListener(KeyboardEvent.KEY_DOWN,keyPressedUp);

//接受鼠标点击控制炮弹发射方向

stage.addEventListener(MouseEvent.CLICK,clickMouse);

}

private function clickMouse(e:MouseEvent){

drawCannon();

fireBall() ;

target.x=mouseX;

target.y=mouseY;

//ball.x=mouseX;

//ball.y=mouseY;

}

public function drawCannon() {

// place ball//地上球的位置

ball.x = cannonPosition;

ball.y = 350;

ball.z = -100;

// place shadow

ballShadow.x = cannonPosition;

ballShadow.y = 350;

ballShadow.z = -100;

// draw cannon rings//画炮方向

for(var i=0;i<cannonRings.length;i++) {

cannonRings[i].x = cannonPosition;

cannonRings[i].y = 350 + 5*i*Math.sin(cannonAngle*(Math.PI/180));

cannonRings[i].z = -100+ 5*i*Math.cos(cannonAngle*(Math.PI/180));

}

}

// pick a random location for the target in the field//选择一个随机位置的目标领域中的

private function setUpTarget() {

target.x = Math.random()*400-200+275;

target.y = 350;

target.z = Math.random()*1200+600;

}

// accept key presses and move the cannon//接受键值和移动大炮

/*public function keyPressedUp(event:KeyboardEvent) {

if (event.keyCode == 37) {

cannonPosition -= 5;

drawCannon();

} else if (event.keyCode == 39) {

cannonPosition += 5;

drawCannon();

} else if (event.keyCode == 38) {

cannonAngle -= 1;

drawCannon();

} else if (event.keyCode == 40) {

cannonAngle += 1;

drawCannon();

} else if (event.keyCode == 32) {

fireBall();

}

}*/

///接受鼠标点击

//public function keyPressedUp(event:MouseEvent){}

// throw the cannon ball//仍炮弹

private function fireBall() {

var f:Number = 15.0; // initial force of blast//起初爆炸

// calculate initial vector based on force and angle//计算初始向量的基础上的力量和角度

dy = f*Math.sin(cannonAngle*(Math.PI/180));

dz = f*Math.cos(cannonAngle*(Math.PI/180));

// move ball each frame//每帧移动球

addEventListener(Event.ENTER_FRAME, moveBall);

}

// move ball and account for dravity//移动球和帐户dravity

private function moveBall(e:Event) {

// ball movement//球类运动

ball.y += dy;

ball.z += dz;

// move shadow along with ball//随球移动的影子

ballShadow.z += dz;

// change vector to account for gravity//考虑到重力变化向量

dy += .1;

// see if the ball hit the ground//如果球击中地面

if (ball.y > 350) {

removeEventListener(Event.ENTER_FRAME, moveBall);

var dist:Number = Math.sqrt(Math.pow(ball.x-target.x,2)+Math.pow(ball.z-target.z,2));

if (dist < 50) {

setUpTarget();

}

}

}

}

}

////////////////////////想要得到的效果是鼠标点击舞台的任何位置,小球就弹到哪里
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: