为了学习和实用目的,我想将我的代码分成更小的位。这是3球。 2从右到左移动,每当他们离开屏幕时他们的速度增加,他们再次出现在随机高度的右侧。另一个球同样的事情,但它垂直移动。
我确实为球写了一个单独的类(所以我不必为它们调整和着色3次)虽然这个类实际上很糟糕,因为我只能添加更多相等的球而不调整大小或改变颜色! / p>
TL; DR需要更好地了解课程!
你可以在下面的代码中看到(如果需要的话,复制n'意大利面给它)
package {
(...)
import RedBall;
/** Redball is the custom class I made, its contents are:
ball.graphics.beginFill (0xFF0000);
ball.graphics.drawCircle (0, 0, 50);
ball.graphics.endFill(); - Not very handy ^^" **/
public class Example extends Sprite {
var a:RedBall = new RedBall();
var b:RedBall = new RedBall();
var c:RedBall = new RedBall();
var Aspeed, Bspeed, Cspeed:Number;
var speedModifier:Number;
public function Example() {
Aspeed = 10;
Bspeed = 10;
Cspeed = 10;
speedModifier = 1;
a.ball.x = Math.random() * stage.stageHeight;
a.ball.y = 300;
b.ball.x = Math.random() * stage.stageWidth;
b.ball.y = 300;
c.ball.x = 300;
c.ball.y = Math.random() * stage.stageWidth;
addChild(a.ball);
addChild(b.ball);
addChild(c.ball);
stage.addEventListener(MouseEvent.CLICK, slow);
stage.addEventListener(Event.ENTER_FRAME, update);
}
/** After clicking it makes everything 5 times slower,
no turning back as there is no on/off yet :[**/
function slow(e:Event) {
speedModifier = 0.2;
}
球的运动。
function update(e:Event):void {
a.ball.x = a.ball.x - Aspeed * speedModifier;
b.ball.x = b.ball.x - Bspeed * speedModifier;
c.ball.y = c.ball.y + Cspeed * speedModifier;
if (a.ball.x < -a.ball.width) {
a.ball.x = stage.stageWidth + a.ball.width;
a.ball.y = Math.random() * stage.stageHeight;
if (Aspeed<40) {
Aspeed += 5;
}
}
if (c.ball.y > stage.stageHeight+c.ball.height) {
c.ball.y = stage.stageHeight - stage.stageHeight-c.ball.height;
c.ball.x = Math.random() * stage.stageWidth;
if (Cspeed<40) {
Cspeed += 5;
}
}
}
关于如何将上述内容分成小型高效课程的任何想法?我确实尝试用RedBall类最小化重复,我会继续阅读它。虽然如果你能指出“在x,y和z中剪切”,这对我来说也是一个很大的帮助和飞跃
答案 0 :(得分:1)
您开始正确行事 - 为您所谓的Ball
创建一个类。然后你可以在其中创建公共函数,以便改变它的属性:
function setSpeed(value:Number) {
this.speed = value; // what used to be Aspeed, Bspeed, Cspeed, now is simply 'speed'
}
function setColor(color:uint) {
this.graphics.beginFill(color); // used to be `0xFF0000`, now is dynamic
}
speed
是此类中的成员变量,并且使用了this.graphics
,因为该类应该扩展Sprite。
所以你将实例化同一个班级,但只是简单地“皮肤”&#39;它使用一行功能。你甚至可以制作一个for循环,以便更容易创建球。
答案 1 :(得分:0)
而不是现在最初的帖子中的代码我改为使用它,它应该是一个好的类吗?
这是RedBall类(RedBall只是名称,球可以有其他颜色)。
public function setColor(color:uint) {
this.graphics.beginFill(color);
}
public function setSize(ballX, ballY, radius:uint) {
this.graphics.drawCircle (ballX, ballY, radius);
}
public function setAcceleration(value:Number) {
this.accel = value;
}
public function setSpeed(value:Number) {
this.speed = value;
}
public function startMovement() {
this.x -= this.speed;
}
现在只有一个问题,它是startMovement函数,因为它不起作用!在函数中:
function update(e:Event):void {
a.startMovement();
}
并且没有任何线索:3