切割成更小的块AS3

时间:2014-04-10 09:12:12

标签: actionscript-3 class flashdevelop

为了学习和实用目的,我想将我的代码分成更小的位。这是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中剪切”,这对我来说也是一个很大的帮助和飞跃

2 个答案:

答案 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