AS3.0画一个轨道线
球类package{importflash.display.Sprite;publicclassBallextendsSprite{publicvarradius:Num...
球类
package {
import flash.display.Sprite;
public class Ball extends Sprite {
public var radius:Number;
private var color:uint;
public var vx:Number=0;
public var vy:Number=0;
public var mass:Number=1;
public function Ball(radius:Number=40,color:uint=0xff0000) {
this.radius=radius;
this.color=color;
init();
}
public function init():void {
graphics.beginFill(color);
graphics.drawCircle(0,0,radius);
graphics.endFill();
}
}
}
文档类
package {
import flash.display.Sprite;
import flash.events.Event;
public class Orbit extends Sprite {
private var particles:Array;
private var numParticles:uint=2;
public function Orbit() {
init();
}
private function init():void {
particles = new Array();
var sun:Ball=new Ball(100,0xffff00);
sun.x=stage.stageWidth/2;
sun.y=stage.stageHeight/2;
sun.mass=10000;
addChild(sun);
particles.push(sun);
var planet:Ball=new Ball(10,0x00ff00);
planet.x=stage.stageWidth/2+200;
planet.y=stage.stageHeight/2;
planet.vy=7;
planet.mass=1;
addChild(planet);
particles.push(planet);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame(event:Event):void {
for (var i:uint=0; i<numParticles; i++) {
var particle:Ball=particles[i];
particle.x+=particle.vx;
particle.y+=particle.vy;
}
for (i=0; i<numParticles-1; i++) {
var partA:Ball=particles[i];
for (var j:uint=i+1; j<numParticles; j++) {
var partB:Ball=particles[j];
gravitate(partA,partB);
}
}
}
private function gravitate(partA:Ball,partB:Ball):void {
var dx:Number=partB.x-partA.x;
var dy:Number=partB.y-partA.y;
var distSQ:Number=dx*dx+dy*dy;
var dist:Number=Math.sqrt(distSQ);
var force:Number=partA.mass*partB.mass/distSQ;
var ax:Number=force*dx/dist;
var ay:Number=force*dy/dist;
partA.vx+=ax/partA.mass;
partA.vy+=ay/partA.mass;
partB.vx-=ax/partB.mass;
partB.vy-=ay/partB.mass;
}
}
}
代码测过无误 但是想要 让它自己画 轨道线 由于 环绕的球 在慢慢的偏离 中心球
所以不能单画个圆
想要 画出球的的轨迹 即轨迹线 基本方法都知道 不用解释 只要说明 把哪里怎么改
谢谢了 高手 展开
package {
import flash.display.Sprite;
public class Ball extends Sprite {
public var radius:Number;
private var color:uint;
public var vx:Number=0;
public var vy:Number=0;
public var mass:Number=1;
public function Ball(radius:Number=40,color:uint=0xff0000) {
this.radius=radius;
this.color=color;
init();
}
public function init():void {
graphics.beginFill(color);
graphics.drawCircle(0,0,radius);
graphics.endFill();
}
}
}
文档类
package {
import flash.display.Sprite;
import flash.events.Event;
public class Orbit extends Sprite {
private var particles:Array;
private var numParticles:uint=2;
public function Orbit() {
init();
}
private function init():void {
particles = new Array();
var sun:Ball=new Ball(100,0xffff00);
sun.x=stage.stageWidth/2;
sun.y=stage.stageHeight/2;
sun.mass=10000;
addChild(sun);
particles.push(sun);
var planet:Ball=new Ball(10,0x00ff00);
planet.x=stage.stageWidth/2+200;
planet.y=stage.stageHeight/2;
planet.vy=7;
planet.mass=1;
addChild(planet);
particles.push(planet);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame(event:Event):void {
for (var i:uint=0; i<numParticles; i++) {
var particle:Ball=particles[i];
particle.x+=particle.vx;
particle.y+=particle.vy;
}
for (i=0; i<numParticles-1; i++) {
var partA:Ball=particles[i];
for (var j:uint=i+1; j<numParticles; j++) {
var partB:Ball=particles[j];
gravitate(partA,partB);
}
}
}
private function gravitate(partA:Ball,partB:Ball):void {
var dx:Number=partB.x-partA.x;
var dy:Number=partB.y-partA.y;
var distSQ:Number=dx*dx+dy*dy;
var dist:Number=Math.sqrt(distSQ);
var force:Number=partA.mass*partB.mass/distSQ;
var ax:Number=force*dx/dist;
var ay:Number=force*dy/dist;
partA.vx+=ax/partA.mass;
partA.vy+=ay/partA.mass;
partB.vx-=ax/partB.mass;
partB.vy-=ay/partB.mass;
}
}
}
代码测过无误 但是想要 让它自己画 轨道线 由于 环绕的球 在慢慢的偏离 中心球
所以不能单画个圆
想要 画出球的的轨迹 即轨迹线 基本方法都知道 不用解释 只要说明 把哪里怎么改
谢谢了 高手 展开
3个回答
2011-07-27
展开全部
你说的这个小动画我已经做出来了,不要2分钟就可以完成这样一个地球转动的动画。
首先打开flash,在图层1的第一帧画一个椭圆,命名为地球,新建一个引导层,画一个椭圆,复制这个椭圆,新建一个图层命名“轨道”,点击“编辑”>“粘贴到当前位置”,并使图层在最顶端,在三个图层的第15帧都插入帧,使延续到第15帧;然后锁住“轨道”图层并隐藏此图层;用橡皮擦将引导层擦掉一点点(为了时地球沿轨道运动),在地球图层的第一帧,将地球的中心对准引导层的一端,在中间插入动画补间,在最后一帧插入关键帧,同时在最后一帧将地球的中心对准轨道的另一端,测试影片即可。
如果这个动画还有什么问题可以问我,希望可以帮到你,(*^__^*)
另外,团IDC网上有许多产品团购,便宜有口碑
首先打开flash,在图层1的第一帧画一个椭圆,命名为地球,新建一个引导层,画一个椭圆,复制这个椭圆,新建一个图层命名“轨道”,点击“编辑”>“粘贴到当前位置”,并使图层在最顶端,在三个图层的第15帧都插入帧,使延续到第15帧;然后锁住“轨道”图层并隐藏此图层;用橡皮擦将引导层擦掉一点点(为了时地球沿轨道运动),在地球图层的第一帧,将地球的中心对准引导层的一端,在中间插入动画补间,在最后一帧插入关键帧,同时在最后一帧将地球的中心对准轨道的另一端,测试影片即可。
如果这个动画还有什么问题可以问我,希望可以帮到你,(*^__^*)
另外,团IDC网上有许多产品团购,便宜有口碑
追问
谢谢 您的 做法 但我是 用程序作
如果 用动画做 我大概5分钟也能做出来
呵呵
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-07-27
展开全部
你说的这个小动画我已经做出来了,不要2分钟就可以完成这样一个地球转动的动画。
首先打开flash,在图层1的第一帧画一个椭圆,命名为地球,新建一个引导层,画一个椭圆,复制这个椭圆,新建一个图层命名“轨道”,点击“编辑”>“粘贴到当前位置”,并使图层在最顶端,在三个图层的第15帧都插入帧,使延续到第15帧;然后锁住“轨道”图层并隐藏此图层;用橡皮擦将引导层擦掉一点点(为了时地球沿轨道运动),在地球图层的第一帧,将地球的中心对准引导层的一端,在中间插入动画补间,在最后一帧插入关键帧,同时在最后一帧将地球的中心对准轨道的另一端,测试影片即可。
如果这个动画还有什么问题可以问我,希望可以帮到你,(*^__^*)
另外,团IDC网上有许多产品团购,便宜有口碑
首先打开flash,在图层1的第一帧画一个椭圆,命名为地球,新建一个引导层,画一个椭圆,复制这个椭圆,新建一个图层命名“轨道”,点击“编辑”>“粘贴到当前位置”,并使图层在最顶端,在三个图层的第15帧都插入帧,使延续到第15帧;然后锁住“轨道”图层并隐藏此图层;用橡皮擦将引导层擦掉一点点(为了时地球沿轨道运动),在地球图层的第一帧,将地球的中心对准引导层的一端,在中间插入动画补间,在最后一帧插入关键帧,同时在最后一帧将地球的中心对准轨道的另一端,测试影片即可。
如果这个动画还有什么问题可以问我,希望可以帮到你,(*^__^*)
另外,团IDC网上有许多产品团购,便宜有口碑
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
/*
private function onEnterFrame(event:Event):void
{
for (var i:uint=0; i<numParticles; i++)
{
var particle:Ball = particles[i];
particle.x += particle.vx;
particle.y += particle.vy;
particle.ix = particle.x;
particle.iy = particle.y;
particle.dr(graphics);
}
for (i=0; i<numParticles-1; i++)
{
var partA:Ball = particles[i];
for (var j:uint=i+1; j<numParticles; j++)
{
var partB:Ball = particles[j];
gravitate(partA,partB);
}
}
return;
}
*/
package
{
import __AS3__.vec.Vector;
import flash.display.Sprite;
import flash.display.Stage;
import flash.display.Graphics;
public class Ball extends Sprite
{
public var radius:Number;
private var color:uint;
public var vx:Number = 0;
public var vy:Number = 0;
public var mass:Number = 1;
private var data:Vector.<Number> = new Vector.<Number>();
private var commands:Vector.<int> = new Vector.<int>();
public function Ball(radius:Number=40,color:uint=0xff0000)
{
this.radius = radius;
this.color = color;
commands[0] = 1;
init();
return;
}
//x,y属性覆盖不了...
public function set ix(nX:Number)
{
data.push(nX);
return;
}
public function set iy(nY:Number)
{
data.push(nY);
return;
}
//必须先设置ix再设置iy!!
public function init():void
{
graphics.beginFill(color);
graphics.drawCircle(0,0,radius);
graphics.endFill();
}
public function dr(myGraphics:Graphics):void
{
myGraphics.clear();
for (var i:Number=commands.length; i <= data.length/2; i++)
{
commands[i] = 2;
}
myGraphics.lineStyle(0);
myGraphics.drawPath(commands, data);
/*commands.length = 0;
data.length = 0;*/
return;
}
}
}
应该看的懂吧
多给点分!!!
private function onEnterFrame(event:Event):void
{
for (var i:uint=0; i<numParticles; i++)
{
var particle:Ball = particles[i];
particle.x += particle.vx;
particle.y += particle.vy;
particle.ix = particle.x;
particle.iy = particle.y;
particle.dr(graphics);
}
for (i=0; i<numParticles-1; i++)
{
var partA:Ball = particles[i];
for (var j:uint=i+1; j<numParticles; j++)
{
var partB:Ball = particles[j];
gravitate(partA,partB);
}
}
return;
}
*/
package
{
import __AS3__.vec.Vector;
import flash.display.Sprite;
import flash.display.Stage;
import flash.display.Graphics;
public class Ball extends Sprite
{
public var radius:Number;
private var color:uint;
public var vx:Number = 0;
public var vy:Number = 0;
public var mass:Number = 1;
private var data:Vector.<Number> = new Vector.<Number>();
private var commands:Vector.<int> = new Vector.<int>();
public function Ball(radius:Number=40,color:uint=0xff0000)
{
this.radius = radius;
this.color = color;
commands[0] = 1;
init();
return;
}
//x,y属性覆盖不了...
public function set ix(nX:Number)
{
data.push(nX);
return;
}
public function set iy(nY:Number)
{
data.push(nY);
return;
}
//必须先设置ix再设置iy!!
public function init():void
{
graphics.beginFill(color);
graphics.drawCircle(0,0,radius);
graphics.endFill();
}
public function dr(myGraphics:Graphics):void
{
myGraphics.clear();
for (var i:Number=commands.length; i <= data.length/2; i++)
{
commands[i] = 2;
}
myGraphics.lineStyle(0);
myGraphics.drawPath(commands, data);
/*commands.length = 0;
data.length = 0;*/
return;
}
}
}
应该看的懂吧
多给点分!!!
追问
老大 我虽然说 基础的都能看懂 但是 你好歹说一下import __AS3__.vec.Vector;
是什么
哪个是哪个类 你新添加的 地方 作用是什么
为什么 这样写
帮忙说清楚啊
好的话 不是给高分 是给满分
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询