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();
}
}
}
}
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();
}
}
}
}
}
想要得到的效果是鼠标点击舞台的任何位置,小球就弹到哪里