一个问题求解
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();
}
}
}
}
}
////////////////////////想要得到的效果是鼠标点击舞台的任何位置,小球就弹到哪里
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();
}
}
}
}
}
////////////////////////想要得到的效果是鼠标点击舞台的任何位置,小球就弹到哪里
相关文章推荐
- 一个分酒问题的求解
- ~~~关于ExpandableListAdapter的一个比较二的问题,求解啊~~~
- 一个sql语句的经典问题,求解!
- 一个搜索问题的求解
- 深入浅出数据分析:最优化-用Excel求解一个线性规划问题
- 求解一个flapping问题,双端口可学一个MAC
- 一个变形虫适应算法求解CSP问题
- 用递归法:设计算法求解汉诺塔问题,并编程实现。 (1) Hanoi(汉诺)塔问题分析 这是一个古典的数学问题,是一个用递归方法解题的典型例子。问题是这样的:古代有一个梵塔,塔内有3个座 A,B,C
- 【数据结构与算法分析1.2】编写一个程序求解字谜游戏问题
- 关于cuda编程的一个问题(求解)
- 做一个项目是遇到的问题与求解!
- 求解一个简单的创建单链表的问题为什么用二级指针 ?
- 一个难解的矩阵问题~~求解
- 数学方法求解约瑟夫问题(zz)---n久前的一个问题了 【摘自旧博】
- Linuxc 下用穷举算法求解爱因斯坦的一个数学问题
- 一个C语言问题,求解
- 问题六十五:二叉查找树的一个应用实例——求解一元十次方程时单实根区间的划分
- 第十二周项目四----利用遍历思想求解图问题之输出通过一个节点的所有简单回路
- 挑战算法高手:一个Java算法问题求解
- 求解:SQL SERVER 2008的一个问题