《making things move 》第五章
速度:
在这一章里的速度,可以简单解释为 pixels per frame 。
这是不太精确的,比如你做一些游戏或仿真的时候。由于帧频的不确定性(cpu占用,或过多的运动点会拖慢帧频)会发生一些问题,这些以后章节会讲,在这章,暂时用 pixels per frame
向量:有大小和方向 ,大小相等,方向相同的两个向量就是相同的,跟位置没关 ,用箭头表示
(相等的向量)
速度的例子,在时间轴上
点这里 显示/隐藏 媒体
角速度:
知道x轴,y轴上的速度,这样移动物体很简单,但是更多时候我们不会直接知道,vx,vy 。
我们只知道一个 speed,一个angle 如何移动物体呢?
比如,速度为3 ,45度
很明显要先求出来 vx ,vy ,变成了求直角三角形两条边了
我们的公式又派上用场了!看见x想到cos,看到y 想到sin
vx = Math.cos(angle) * speed;
vy = Math.sin(angle) * speed;
点这里 显示/隐藏 媒体
向量加法:把向量们首尾相连,就会看到结果
返回看看刚才的例子是不是这样
例子:鼠标跟随
点这里 显示/隐藏 媒体
加速度,角加速度 : 跟速度差不多,需要记住的就是 速度是改变物体位置的,而加速度是改变物体速度的
直接看例子
点这里 显示/隐藏 媒体
终极例子:宇宙飞船
键盘控制
上 增加角加速度 ,左右改变角度
没什么难度,看代码
点这里 显示/隐藏 媒体
这章最重要的4个内容
* 角速度 转变 x,y轴的分速度
*角加速度 转变为x,y轴的分加速度
*分加速度与分速度相加
*分速度与分位置相加
重要公式:
Convert angular velocity to x, y velocity:
vx = speed * Math.cos(angle);
vy = speed * Math.sin(angle);
Convert angular acceleration (any force acting on an object) to x, y acceleration:
ax = force * Math.cos(angle);
ay = force * Math.sin(angle);
Add acceleration to velocity:
vx += ax;
vy += ay;
Add velocity to position:
movieclip._x += vx;
movieclip._y += vy;
在这一章里的速度,可以简单解释为 pixels per frame 。
这是不太精确的,比如你做一些游戏或仿真的时候。由于帧频的不确定性(cpu占用,或过多的运动点会拖慢帧频)会发生一些问题,这些以后章节会讲,在这章,暂时用 pixels per frame
向量:有大小和方向 ,大小相等,方向相同的两个向量就是相同的,跟位置没关 ,用箭头表示
(相等的向量)
速度的例子,在时间轴上

init();
function init():Void
{
vx = 5;
// vy = 5;
ball = attachMovie("ball", "ball", 0);
ball._x = 0;
ball._y = Stage.height / 2;
}
function onEnterFrame():Void
{
ball._x += vx;
// ball._y += vy;
}
function init():Void
{
vx = 5;
// vy = 5;
ball = attachMovie("ball", "ball", 0);
ball._x = 0;
ball._y = Stage.height / 2;
}
function onEnterFrame():Void
{
ball._x += vx;
// ball._y += vy;
}
角速度:
知道x轴,y轴上的速度,这样移动物体很简单,但是更多时候我们不会直接知道,vx,vy 。
我们只知道一个 speed,一个angle 如何移动物体呢?
比如,速度为3 ,45度
很明显要先求出来 vx ,vy ,变成了求直角三角形两条边了
我们的公式又派上用场了!看见x想到cos,看到y 想到sin
vx = Math.cos(angle) * speed;
vy = Math.sin(angle) * speed;

init();
function init():Void
{
angle = 45;
speed = 3;
ball = attachMovie("ball", "ball", 0);
ball._x = Stage.width / 2;
ball._y = Stage.height / 2;
}
function onEnterFrame():Void
{
var radians:Number = angle * Math.PI / 180;
var vx:Number = Math.cos(angle) * speed;
var vy:Number = Math.sin(angle) * speed;
ball._x += vx;
ball._y += vy;
}
function init():Void
{
angle = 45;
speed = 3;
ball = attachMovie("ball", "ball", 0);
ball._x = Stage.width / 2;
ball._y = Stage.height / 2;
}
function onEnterFrame():Void
{
var radians:Number = angle * Math.PI / 180;
var vx:Number = Math.cos(angle) * speed;
var vy:Number = Math.sin(angle) * speed;
ball._x += vx;
ball._y += vy;
}
向量加法:把向量们首尾相连,就会看到结果
返回看看刚才的例子是不是这样
例子:鼠标跟随
init();
function init():Void
{
speed = 5;
arrow = attachMovie("arrow", "arrow", 0);
arrow._x = Stage.width / 2;
arrow._y = Stage.height / 2;
}
function onEnterFrame():Void
{
var dx:Number = _xmouse - arrow._x;
var dy:Number = _ymouse - arrow._y;
var angle:Number = Math.atan2(dy, dx);
arrow._rotation = angle * 180 / Math.PI;
var vx:Number = Math.cos(angle) * speed;
var vy:Number = Math.sin(angle) * speed;
arrow._x += vx;
arrow._y += vy;
}
function init():Void
{
speed = 5;
arrow = attachMovie("arrow", "arrow", 0);
arrow._x = Stage.width / 2;
arrow._y = Stage.height / 2;
}
function onEnterFrame():Void
{
var dx:Number = _xmouse - arrow._x;
var dy:Number = _ymouse - arrow._y;
var angle:Number = Math.atan2(dy, dx);
arrow._rotation = angle * 180 / Math.PI;
var vx:Number = Math.cos(angle) * speed;
var vy:Number = Math.sin(angle) * speed;
arrow._x += vx;
arrow._y += vy;
}

加速度,角加速度 : 跟速度差不多,需要记住的就是 速度是改变物体位置的,而加速度是改变物体速度的
直接看例子

init();
function init():Void
{
force = 0.5;
vx = 0;
vy = 0;
arrow = attachMovie("arrow", "arrow", 0);
arrow._x = Stage.width / 2;
arrow._y = Stage.height / 2;
}
function onEnterFrame():Void
{
var dx:Number = _xmouse - arrow._x;
var dy:Number = _ymouse - arrow._y;
var angle:Number = Math.atan2(dy, dx);
arrow._rotation = angle * 180 / Math.PI;
var ax:Number = Math.cos(angle) * force;
var ay:Number = Math.sin(angle) * force;
vx += ax;
vy += ay;
arrow._x += vx;
arrow._y += vy;
}
function init():Void
{
force = 0.5;
vx = 0;
vy = 0;
arrow = attachMovie("arrow", "arrow", 0);
arrow._x = Stage.width / 2;
arrow._y = Stage.height / 2;
}
function onEnterFrame():Void
{
var dx:Number = _xmouse - arrow._x;
var dy:Number = _ymouse - arrow._y;
var angle:Number = Math.atan2(dy, dx);
arrow._rotation = angle * 180 / Math.PI;
var ax:Number = Math.cos(angle) * force;
var ay:Number = Math.sin(angle) * force;
vx += ax;
vy += ay;
arrow._x += vx;
arrow._y += vy;
}
终极例子:宇宙飞船
键盘控制
上 增加角加速度 ,左右改变角度
没什么难度,看代码

init();
function init():Void
{
vr = 5;
thrust = 0.2;
vx = 0;
vy = 0;
ship = attachMovie("ship", "ship", 0);
ship._x = Stage.width / 2;
ship._y = Stage.height / 2;
}
function onEnterFrame():Void
{
if (Key.isDown(Key.LEFT))
{
ship._rotation -= vr;
}
else if (Key.isDown(Key.RIGHT))
{
ship._rotation += vr;
}
if (Key.isDown(Key.UP))
{
var radians:Number = ship._rotation * Math.PI / 180;
var ax:Number = Math.cos(radians) * thrust;
var ay:Number = Math.sin(radians) * thrust;
vx += ax;
vy += ay;
ship.gotoAndStop(2);
}
else
{
ship.gotoAndStop(1);
}
ship._x += vx;
ship._y += vy;
}
function init():Void
{
vr = 5;
thrust = 0.2;
vx = 0;
vy = 0;
ship = attachMovie("ship", "ship", 0);
ship._x = Stage.width / 2;
ship._y = Stage.height / 2;
}
function onEnterFrame():Void
{
if (Key.isDown(Key.LEFT))
{
ship._rotation -= vr;
}
else if (Key.isDown(Key.RIGHT))
{
ship._rotation += vr;
}
if (Key.isDown(Key.UP))
{
var radians:Number = ship._rotation * Math.PI / 180;
var ax:Number = Math.cos(radians) * thrust;
var ay:Number = Math.sin(radians) * thrust;
vx += ax;
vy += ay;
ship.gotoAndStop(2);
}
else
{
ship.gotoAndStop(1);
}
ship._x += vx;
ship._y += vy;
}
这章最重要的4个内容
* 角速度 转变 x,y轴的分速度
*角加速度 转变为x,y轴的分加速度
*分加速度与分速度相加
*分速度与分位置相加
重要公式:
Convert angular velocity to x, y velocity:
vx = speed * Math.cos(angle);
vy = speed * Math.sin(angle);
Convert angular acceleration (any force acting on an object) to x, y acceleration:
ax = force * Math.cos(angle);
ay = force * Math.sin(angle);
Add acceleration to velocity:
vx += ax;
vy += ay;
Add velocity to position:
movieclip._x += vx;
movieclip._y += vy;