满月婴儿体重增长多少:详解Flash AS代码实现弹弓弓弦弹性形变
来源:百度文库 编辑:偶看新闻 时间:2024/04/19 16:26:03
我们用Flash ActionScript代码制作一个模拟弹弓弓弦弹性形变的小游戏教程,我们一步一步由浅入深来详细说明制作步骤。
思路:准备三个小球元件,使其中一个小球可以拖动,在使它沿着一条线移动,用ActionScript代码计算移动的角度,最后实现弹弓弓弦弹性形变的一个互动游戏。
一、Flash制作小球随鼠标拖动
启动Flash,首先我们绘制两个元件,非常简单的。绘制一个小球然后转变为影片剪辑元件,同样方法再建议一个不同颜色的小球的影片剪辑。
然后在主场景中直接输入如下代码:
attachMovie("sling", "sling_1", _root.getNextHighestDepth(), {_x:20, _y:200});
attachMovie("sling", "sling_2", _root.getNextHighestDepth(), {_x:480, _y:200});
attachMovie("ball", "ball", _root.getNextHighestDepth(), {_x:250, _y:100});
_root.createEmptyMovieClip("elastic", _root.getNextHighestDepth());
ball.onPress = function() {
startDrag(this);
};
ball.onRelease = function() {
stopDrag();
};
二、Flash制作随小球移动的弦
然后我们通过修改上面的代码,在两个小球之间绘制一条线,可以随中间小球任意移动。
attachMovie("sling", "sling_1", _root.getNextHighestDepth(), {_x:20, _y:200});
attachMovie("sling", "sling_2", _root.getNextHighestDepth(), {_x:480, _y:200});
attachMovie("ball", "ball", _root.getNextHighestDepth(), {_x:250, _y:100});
_root.createEmptyMovieClip("elastic", _root.getNextHighestDepth());
ball.onPress = function() {
startDrag(this);
};
ball.onRelease = function() {
stopDrag();
};
elastic.onEnterFrame = function() {
this.clear();
this.lineStyle(2, 0x009900);
this.moveTo(sling_1._x, sling_1._y);
if (ball._y>182) {
dist_x = ball._x-sling_1._x;
dist_y = ball._y-sling_1._y;
distance_from_sling = Math.sqrt(dist_x*dist_x+dist_y*dist_y);
elastic_length = Math.sqrt(distance_from_sling*distance_from_sling-18*18);
angle = Math.atan2(dist_y, dist_x)+Math.asin(18/distance_from_sling);
this.lineTo(sling_1._x+elastic_length*Math.cos(angle), sling_1._y+elastic_length*Math.sin(angle));
} else {
this.lineTo(sling_2._x, sling_2._y);
}
this.moveTo(sling_2._x, sling_2._y);
if (ball._y>182) {
dist_x = ball._x-sling_2._x;
dist_y = ball._y-sling_2._y;
distance_from_sling = Math.sqrt(dist_x*dist_x+dist_y*dist_y);
elastic_length = Math.sqrt(distance_from_sling*distance_from_sling-18*18);
angle = Math.atan2(dist_y, dist_x)+Math.asin(18/distance_from_sling)*-1;
this.lineTo(sling_2._x+elastic_length*Math.cos(angle), sling_2._y+elastic_length*Math.sin(angle));
} else {
this.lineTo(sling_2._x, sling_2._y);
}
};
三、Flash计算弦的形变角度
在这里我们可以很轻松的计算出小球在线上的角度来。
稍微做一下改动。
attachMovie("sling", "sling_1", _root.getNextHighestDepth(), {_x:20, _y:200});
attachMovie("sling", "sling_2", _root.getNextHighestDepth(), {_x:480, _y:200});
attachMovie("ball", "ball", _root.getNextHighestDepth(), {_x:250, _y:100});
_root.createEmptyMovieClip("elastic", _root.getNextHighestDepth());
xspeed = 0;
yspeed = 0;
fire = false;
ball.onPress = function() {
fire = false;
startDrag(this);
};
ball.onRelease = function() {
stopDrag();
fire = true;
};
ball.onEnterFrame = function() {
if (fire) {
this._x += (xspeed*0.001);
this._y += (yspeed*0.001);
}
};
elastic.onEnterFrame = function() {
this.clear();
this.lineStyle(2, 0x009900);
this.moveTo(sling_1._x, sling_1._y);
if (ball._y>182) {
dist_x = ball._x-sling_1._x;
dist_y = ball._y-sling_1._y;
distance_from_sling = Math.sqrt(dist_x*dist_x+dist_y*dist_y);
elastic_length = Math.sqrt(distance_from_sling*distance_from_sling-18*18);
angle = Math.atan2(dist_y, dist_x)+Math.asin(18/distance_from_sling);
saved_angle = angle;
this.lineTo(sling_1._x+elastic_length*Math.cos(angle), sling_1._y+elastic_length*Math.sin(angle));
this.lineTo(ball._x,ball._y);
} else {
this.lineTo(sling_2._x, sling_2._y);
}
this.moveTo(sling_2._x, sling_2._y);
if (ball._y>182) {
dist_x = ball._x-sling_2._x;
dist_y = ball._y-sling_2._y;
distance_from_sling = Math.sqrt(dist_x*dist_x+dist_y*dist_y);
elastic_length = Math.sqrt(distance_from_sling*distance_from_sling-18*18);
angle = Math.atan2(dist_y, dist_x)+Math.asin(18/distance_from_sling)*-1;
this.lineTo(sling_2._x+elastic_length*Math.cos(angle), sling_2._y+elastic_length*Math.sin(angle));
this.lineTo(ball._x,ball._y);
} else {
this.lineTo(sling_2._x, sling_2._y);
}
};
四、Flash制作小球与弦的互动运动
最后我们让小球自动运动或者你可以用鼠标拖动小球。 var ball:MovieClip = _root.attachMovie("ball", "ball", 2, {_x:250, _y:100});
var elastic:MovieClip = _root.createEmptyMovieClip("elastic", 1);
var point1:MovieClip = _root.attachMovie("sling", "point1", 3, {_x:50, _y:200});
var point2:MovieClip = _root.attachMovie("sling", "point2", 4, {_x:450, _y:200});
var gravity = 0.1;
var angle1:Number = 0;
var angle2:Number = 0;
var radius:Number = 13.0;
// Or whatever half the width of your ball is.
var elasticCoefficient:Number = 0.001;
// This number will affect the stretchiness of the sling. The greater the number
// the tighter the elastic will be.
var released:Boolean = true;
var forced:Boolean = false;
var acc:Object = {x:0, y:0};
var vel:Object = {x:0, y:0};
_root.onMouseDown = function() {
ball._x = _root._xmouse;
ball._y = _root._ymouse;
ball.startDrag();
_root.released = false;
vel.x = 0;
vel.y = 0;
};
_root.onMouseUp = function() {
ball.stopDrag();
_root.released = true;
};
ball.onPress = function() {
ball.startDrag();
_root.released = false;
vel.x = 0;
vel.y = 0;
};
ball.onRelease = function() {
ball.stopDrag();
_root.released = true;
};
_root.onEnterFrame = function() {
elastic.clear();
elastic.lineStyle(3, 0xFF0000);
if (released) {
ball._x += vel.x;
ball._y += vel.y;
}
if (ball._y>=187) {
/* This area differs from the code in the tutorial.
The reason for that is I didn't read the code, I just looked at the examples.
I try to gain experience with problem-solving by doing things as close to by myself as possible. */
forced = true;
var x1:Number = ball._x-point1._x;
var y1:Number = ball._y-point1._y;
var x2:Number = point2._x-ball._x;
var y2:Number = point2._y-ball._y;
var distance1:Number = Math.sqrt(x1*x1+y1*y1);
var distance2:Number = Math.sqrt(x2*x2+y2*y2);
_root.angle1 = Math.atan2(y1, x1);
_root.angle2 = Math.atan2(y2, x2);
var xOffset:Number = Math.cos(angle1+Math.PI/2)*radius;
var yOffset:Number = Math.sin(angle1+Math.PI/2)*radius;
var xOffset2:Number = Math.cos(angle2+Math.PI/2)*radius;
var yOffset2:Number = Math.sin(angle2+Math.PI/2)*radius;
angle1 += Math.sin(radius/distance1);
angle2 += Math.sin(radius/distance2)*-1;
elastic.moveTo(point1._x, point1._y);
elastic.lineTo(ball._x+xOffset, ball._y+yOffset);
elastic.moveTo(point2._x, point2._y);
elastic.lineTo(ball._x+xOffset2, ball._y+yOffset2);
} else {
forced = false;
elastic.moveTo(point1._x, point1._y);
elastic.lineTo(point2._x, point2._y);
}
acc.x = 0;
acc.y = 0;
acc.y = gravity;
if (released && forced) {
/* This section applies the force of the sling to the ball in terms of acceleration based on the stretching of
the sling, in the direction of the displacement, scaled by a coefficient that also encapsulates the mass of
the ball. */
acc.x += distance1*Math.sin(angle2)*elasticCoefficient;
acc.y += -distance1*Math.cos(angle1)*elasticCoefficient;
acc.x += distance2*Math.sin(angle1)*elasticCoefficient;
acc.y += -distance2*Math.cos(angle2)*elasticCoefficient;
}
if (released) {
vel.x += acc.x;
vel.y += acc.y;
}
};
思路:准备三个小球元件,使其中一个小球可以拖动,在使它沿着一条线移动,用ActionScript代码计算移动的角度,最后实现弹弓弓弦弹性形变的一个互动游戏。
一、Flash制作小球随鼠标拖动
启动Flash,首先我们绘制两个元件,非常简单的。绘制一个小球然后转变为影片剪辑元件,同样方法再建议一个不同颜色的小球的影片剪辑。
然后在主场景中直接输入如下代码:
attachMovie("sling", "sling_1", _root.getNextHighestDepth(), {_x:20, _y:200});
attachMovie("sling", "sling_2", _root.getNextHighestDepth(), {_x:480, _y:200});
attachMovie("ball", "ball", _root.getNextHighestDepth(), {_x:250, _y:100});
_root.createEmptyMovieClip("elastic", _root.getNextHighestDepth());
ball.onPress = function() {
startDrag(this);
};
ball.onRelease = function() {
stopDrag();
};
二、Flash制作随小球移动的弦
然后我们通过修改上面的代码,在两个小球之间绘制一条线,可以随中间小球任意移动。
attachMovie("sling", "sling_1", _root.getNextHighestDepth(), {_x:20, _y:200});
attachMovie("sling", "sling_2", _root.getNextHighestDepth(), {_x:480, _y:200});
attachMovie("ball", "ball", _root.getNextHighestDepth(), {_x:250, _y:100});
_root.createEmptyMovieClip("elastic", _root.getNextHighestDepth());
ball.onPress = function() {
startDrag(this);
};
ball.onRelease = function() {
stopDrag();
};
elastic.onEnterFrame = function() {
this.clear();
this.lineStyle(2, 0x009900);
this.moveTo(sling_1._x, sling_1._y);
if (ball._y>182) {
dist_x = ball._x-sling_1._x;
dist_y = ball._y-sling_1._y;
distance_from_sling = Math.sqrt(dist_x*dist_x+dist_y*dist_y);
elastic_length = Math.sqrt(distance_from_sling*distance_from_sling-18*18);
angle = Math.atan2(dist_y, dist_x)+Math.asin(18/distance_from_sling);
this.lineTo(sling_1._x+elastic_length*Math.cos(angle), sling_1._y+elastic_length*Math.sin(angle));
} else {
this.lineTo(sling_2._x, sling_2._y);
}
this.moveTo(sling_2._x, sling_2._y);
if (ball._y>182) {
dist_x = ball._x-sling_2._x;
dist_y = ball._y-sling_2._y;
distance_from_sling = Math.sqrt(dist_x*dist_x+dist_y*dist_y);
elastic_length = Math.sqrt(distance_from_sling*distance_from_sling-18*18);
angle = Math.atan2(dist_y, dist_x)+Math.asin(18/distance_from_sling)*-1;
this.lineTo(sling_2._x+elastic_length*Math.cos(angle), sling_2._y+elastic_length*Math.sin(angle));
} else {
this.lineTo(sling_2._x, sling_2._y);
}
};
三、Flash计算弦的形变角度
在这里我们可以很轻松的计算出小球在线上的角度来。
稍微做一下改动。
attachMovie("sling", "sling_1", _root.getNextHighestDepth(), {_x:20, _y:200});
attachMovie("sling", "sling_2", _root.getNextHighestDepth(), {_x:480, _y:200});
attachMovie("ball", "ball", _root.getNextHighestDepth(), {_x:250, _y:100});
_root.createEmptyMovieClip("elastic", _root.getNextHighestDepth());
xspeed = 0;
yspeed = 0;
fire = false;
ball.onPress = function() {
fire = false;
startDrag(this);
};
ball.onRelease = function() {
stopDrag();
fire = true;
};
ball.onEnterFrame = function() {
if (fire) {
this._x += (xspeed*0.001);
this._y += (yspeed*0.001);
}
};
elastic.onEnterFrame = function() {
this.clear();
this.lineStyle(2, 0x009900);
this.moveTo(sling_1._x, sling_1._y);
if (ball._y>182) {
dist_x = ball._x-sling_1._x;
dist_y = ball._y-sling_1._y;
distance_from_sling = Math.sqrt(dist_x*dist_x+dist_y*dist_y);
elastic_length = Math.sqrt(distance_from_sling*distance_from_sling-18*18);
angle = Math.atan2(dist_y, dist_x)+Math.asin(18/distance_from_sling);
saved_angle = angle;
this.lineTo(sling_1._x+elastic_length*Math.cos(angle), sling_1._y+elastic_length*Math.sin(angle));
this.lineTo(ball._x,ball._y);
} else {
this.lineTo(sling_2._x, sling_2._y);
}
this.moveTo(sling_2._x, sling_2._y);
if (ball._y>182) {
dist_x = ball._x-sling_2._x;
dist_y = ball._y-sling_2._y;
distance_from_sling = Math.sqrt(dist_x*dist_x+dist_y*dist_y);
elastic_length = Math.sqrt(distance_from_sling*distance_from_sling-18*18);
angle = Math.atan2(dist_y, dist_x)+Math.asin(18/distance_from_sling)*-1;
this.lineTo(sling_2._x+elastic_length*Math.cos(angle), sling_2._y+elastic_length*Math.sin(angle));
this.lineTo(ball._x,ball._y);
} else {
this.lineTo(sling_2._x, sling_2._y);
}
};
四、Flash制作小球与弦的互动运动
最后我们让小球自动运动或者你可以用鼠标拖动小球。 var ball:MovieClip = _root.attachMovie("ball", "ball", 2, {_x:250, _y:100});
var elastic:MovieClip = _root.createEmptyMovieClip("elastic", 1);
var point1:MovieClip = _root.attachMovie("sling", "point1", 3, {_x:50, _y:200});
var point2:MovieClip = _root.attachMovie("sling", "point2", 4, {_x:450, _y:200});
var gravity = 0.1;
var angle1:Number = 0;
var angle2:Number = 0;
var radius:Number = 13.0;
// Or whatever half the width of your ball is.
var elasticCoefficient:Number = 0.001;
// This number will affect the stretchiness of the sling. The greater the number
// the tighter the elastic will be.
var released:Boolean = true;
var forced:Boolean = false;
var acc:Object = {x:0, y:0};
var vel:Object = {x:0, y:0};
_root.onMouseDown = function() {
ball._x = _root._xmouse;
ball._y = _root._ymouse;
ball.startDrag();
_root.released = false;
vel.x = 0;
vel.y = 0;
};
_root.onMouseUp = function() {
ball.stopDrag();
_root.released = true;
};
ball.onPress = function() {
ball.startDrag();
_root.released = false;
vel.x = 0;
vel.y = 0;
};
ball.onRelease = function() {
ball.stopDrag();
_root.released = true;
};
_root.onEnterFrame = function() {
elastic.clear();
elastic.lineStyle(3, 0xFF0000);
if (released) {
ball._x += vel.x;
ball._y += vel.y;
}
if (ball._y>=187) {
/* This area differs from the code in the tutorial.
The reason for that is I didn't read the code, I just looked at the examples.
I try to gain experience with problem-solving by doing things as close to by myself as possible. */
forced = true;
var x1:Number = ball._x-point1._x;
var y1:Number = ball._y-point1._y;
var x2:Number = point2._x-ball._x;
var y2:Number = point2._y-ball._y;
var distance1:Number = Math.sqrt(x1*x1+y1*y1);
var distance2:Number = Math.sqrt(x2*x2+y2*y2);
_root.angle1 = Math.atan2(y1, x1);
_root.angle2 = Math.atan2(y2, x2);
var xOffset:Number = Math.cos(angle1+Math.PI/2)*radius;
var yOffset:Number = Math.sin(angle1+Math.PI/2)*radius;
var xOffset2:Number = Math.cos(angle2+Math.PI/2)*radius;
var yOffset2:Number = Math.sin(angle2+Math.PI/2)*radius;
angle1 += Math.sin(radius/distance1);
angle2 += Math.sin(radius/distance2)*-1;
elastic.moveTo(point1._x, point1._y);
elastic.lineTo(ball._x+xOffset, ball._y+yOffset);
elastic.moveTo(point2._x, point2._y);
elastic.lineTo(ball._x+xOffset2, ball._y+yOffset2);
} else {
forced = false;
elastic.moveTo(point1._x, point1._y);
elastic.lineTo(point2._x, point2._y);
}
acc.x = 0;
acc.y = 0;
acc.y = gravity;
if (released && forced) {
/* This section applies the force of the sling to the ball in terms of acceleration based on the stretching of
the sling, in the direction of the displacement, scaled by a coefficient that also encapsulates the mass of
the ball. */
acc.x += distance1*Math.sin(angle2)*elasticCoefficient;
acc.y += -distance1*Math.cos(angle1)*elasticCoefficient;
acc.x += distance2*Math.sin(angle1)*elasticCoefficient;
acc.y += -distance2*Math.cos(angle2)*elasticCoefficient;
}
if (released) {
vel.x += acc.x;
vel.y += acc.y;
}
};
AS在FLASH实现鼠标右键菜单的代码
flash AS代码的问题
flash AS代码的问题
flash AS代码的问题
flash AS代码的问题
flash AS代码的问题
flash AS代码的问题
flash AS代码的问题
flash AS代码的问题
flash AS代码的问题
flash AS代码的问题
flash AS代码的问题
flash AS代码的问题
flash AS代码的问题
flash AS代码的问题
flash AS代码的问题
求助flash中设为主页的as代码
flash场景如何用代码实现更改
flash函数详解
请问在flash加入(加入收藏,设为首页)的AS代码是什么啊?
哪里有详细讲解 FLASH 中AS代码的书籍下呀
寻求flash AS教程?
flash的问题(as)
Flash AS hitTest 问题