多点弹性运动(动画编程深入) 博客分类: AS动画3DflashFL displaymouseeventflashasevents
程序员文章站
2024-03-20 12:16:58
...
上回讲到了弹性运动,其实我们已经可以做很多有趣好玩的东东了,比如弹力小球,就是小孩经常玩的哪种,小球上面连上一根橡皮筋,用力摔出去,碰到东西又弹回来。在这里我仅描述一下,具体实现让你们自己发挥去。今天我要讲的是多点弹性运动,以前的都是单一受力,就是只受到一种弹力,现在我要让他受三种弹力或者以上的弹力,并且可以控制各方向的弹力大小。
大家如果觉得很好,就多多踩一下,留一下言!!!谢谢光顾!!
这里要用四个小球,前面的小球类已经经出,今天只给出多点弹性运动的文档类!!现在到这里,未完待续。。。。。
下面给出文档类全部代码:Demo1.as
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.Event;
public class Demo1 extends Sprite {
private var ball_arr:Array;
private var ball_num:Number=4;
private var spring:Number=0.00006;
private var friction:Number=0.2;
public function Demo1(){
for(var i=0;i<ball_num;;i++){
var ball:Ball=new Ball(10);
stage.addChild(ball);
ball_arr.push(ball);
ball.x=Math.random()*stage.stageWidth;
ball.y=Math.random()*stage.stageHeight;
ball.addEventListener(MouseEvent.MOUSE_DOWN,onMouse_Down);
}
stage.addEventListener(Event.ENTER_FRAME,onEnter_Frame);
stage.addEventListener(MouseEvent.MOUSE_UP,onMouse_Up);
}
private function onMouse_Down(evt:MouseEvent){
evt.target.startDrag();
}
private function onMouse_Up(evt:MouseEvent){
for(var i=0;i<ball_arr.length;i++){
ball_arr[i].stopDrag();
}
//你们的回复是我继续的动力!
}
private function onEnter_Frame(evt:Event){
var ball:Ball=ball_arr[0] as Ball;
for(var i=1;i<ball_arr.length;i++){
var ballA:Ball=ball_arr[i] as Ball;
spring_Move(ball,ballA);
}
ball.vx+=ball.ax;ball.vy+=ball.ay;
ball.vx*=friction;ball.vy*=friction;
ball.x+=ball.vx;ball.y+=ball.vy;
this.graphics.clear();
this.graphics.lineStyle(1);
for(var i=1;i<ball_arr.length;i++){
var ballB:Ball=ball_arr[i];
this.graphics.moveTo(ball.x,ball.y);
this.graphics.lineTo(ballB.x,ballB.y);
}
}
private function spring_Move(ball0,ball1){
var dy=ball1.y-ball0.y;
var dx=ball1.x-ball0.x;
ball0.ax+=dx*spring;
ball0.ay+=dy*spring;
}
}
//谢谢大家,希望各位能学到东西。
}
大家如果觉得很好,就多多踩一下,留一下言!!!谢谢光顾!!
这里要用四个小球,前面的小球类已经经出,今天只给出多点弹性运动的文档类!!现在到这里,未完待续。。。。。
下面给出文档类全部代码:Demo1.as
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.Event;
public class Demo1 extends Sprite {
private var ball_arr:Array;
private var ball_num:Number=4;
private var spring:Number=0.00006;
private var friction:Number=0.2;
public function Demo1(){
for(var i=0;i<ball_num;;i++){
var ball:Ball=new Ball(10);
stage.addChild(ball);
ball_arr.push(ball);
ball.x=Math.random()*stage.stageWidth;
ball.y=Math.random()*stage.stageHeight;
ball.addEventListener(MouseEvent.MOUSE_DOWN,onMouse_Down);
}
stage.addEventListener(Event.ENTER_FRAME,onEnter_Frame);
stage.addEventListener(MouseEvent.MOUSE_UP,onMouse_Up);
}
private function onMouse_Down(evt:MouseEvent){
evt.target.startDrag();
}
private function onMouse_Up(evt:MouseEvent){
for(var i=0;i<ball_arr.length;i++){
ball_arr[i].stopDrag();
}
//你们的回复是我继续的动力!
}
private function onEnter_Frame(evt:Event){
var ball:Ball=ball_arr[0] as Ball;
for(var i=1;i<ball_arr.length;i++){
var ballA:Ball=ball_arr[i] as Ball;
spring_Move(ball,ballA);
}
ball.vx+=ball.ax;ball.vy+=ball.ay;
ball.vx*=friction;ball.vy*=friction;
ball.x+=ball.vx;ball.y+=ball.vy;
this.graphics.clear();
this.graphics.lineStyle(1);
for(var i=1;i<ball_arr.length;i++){
var ballB:Ball=ball_arr[i];
this.graphics.moveTo(ball.x,ball.y);
this.graphics.lineTo(ballB.x,ballB.y);
}
}
private function spring_Move(ball0,ball1){
var dy=ball1.y-ball0.y;
var dx=ball1.x-ball0.x;
ball0.ax+=dx*spring;
ball0.ay+=dy*spring;
}
}
//谢谢大家,希望各位能学到东西。
}