forked from: forked from: forked from: 車が動くアニメーション

by o8que forked from forked from: forked from: 車が動くアニメーション (diff: 7)
81行目で、ガスの量が足りなくなっても「x+=5;」で、車を前進させてしまっているからです。
* その文を消せば、ガスの量が足りなくなったら車が止まるようになります。

なぜとまらないのだろう?? 
wonderfl本で勉強中なのですが、最初からつまづいてしまいました。
どうしたら車がとまるのでしょうか?? よろしくお願いします。
♥0 | Line 78 | Modified 2010-02-25 03:29:59 | MIT License
play

ActionScript3 source code

/**
 * Copyright o8que ( http://wonderfl.net/user/o8que )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/xDsN
 */

/*
 * 81行目で、ガスの量が足りなくなっても「x+=5;」で、車を前進させてしまっているからです。
 * その文を消せば、ガスの量が足りなくなったら車が止まるようになります。
 */

// forked from kazuyuki's forked from: forked from: 車が動くアニメーション
// forked from kazuyuki's forked from: 車が動くアニメーション
// forked from 9re's 車が動くアニメーション
// なぜとまらないのだろう?? 
// wonderfl本で勉強中なのですが、最初からつまづいてしまいました。
// どうしたら車がとまるのでしょうか?? よろしくお願いします。
package {
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    
    import flash.display.MovieClip;
    public class AnimationExample extends Sprite
    {
        // 車のクラス
        private var _car:Car;
        private var _vx1:Number;
        private var _vx2:Number;
        public function AnimationExample() 
        {
            
            // 車のクラスのインスタンスを作る
            // 色は赤にする
            _car = new Car(0xd00000);
            _car.x = stage.stageWidth/2; // 車のx座標を画面中央に表示
            _car.y = stage.stageHeight/2;  // 車のy座標を画面が中央に表示
            _car.buttonMode = true;        
            addChild(_car);        // 表示リストに追加
            
            // 1フレーム毎に実行する処理にmoveCarを追加する

            _car.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDown);
            _car.addEventListener(MouseEvent.MOUSE_UP,onMouseUp);
         }
        
      
      	private function onMouseDown(e:MouseEvent):void{
      		_vx1 = Math.floor(_car.x);
      		e.currentTarget.startDrag();      		
      	}
      	private function onMouseUp(e:MouseEvent):void{
      		e.currentTarget.stopDrag();  
      		_vx2 = Math.floor(_car.x);
     		_car.putGas(_vx1 - _vx2);               // ガソリン入れる
      		addEventListener(Event.ENTER_FRAME, moveCar);
      }
        private function moveCar(e:Event):void 
        {
            _car.move();       // 車を動かす
        }
    }
}

import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
class Car extends  Sprite {
    // ガソリンの量最初は入っていない = 0
    private var _gas:int = 0;
    
    // コンストラクタ
    // 製造時に車の色は決まる
    public function Car(_fillColor:uint) {
        // 描画
        _draw(_fillColor);
    }
    
    // ガソリンを入れる。
    public function putGas(_amount:int):void {
        if (_amount < 0) {     // もしガソリンの量が0以下だったら
            return;            // 何もしないで、ここで終了
        }
        
        _gas += _amount;       // $amountだけ_gasの量を増やす
    }
    
    // 車を動かす
    public function move():void {    		
        if (_gas > 10) {        // ガスの残量が10より大きい場合
            x += 5;             // x座標を5だけ増やす
        } else {                // ガスの量が10以下の場合
        						// 残りのガスの量によって動きが変わる
        }
        
        _gas -=5;            // 車が動くとガスは減る
        if (_gas < 0) {         // もしガスの量が0より小さいなら
            _gas = 0;           // ガスの量を0にセットする
        }                       // ガスの量はマイナスにはならない
    }
    // 描画メソッド。privateなので外からは見えない
    // 車の形や色は製造される時に決まってしまうので外部からは
    // 呼べない
    private function _draw(_fillColor:uint):void
    {
        // 車輪を書く
        graphics.beginFill(0x333333);
        graphics.drawCircle(10, 20, 5);
        graphics.drawCircle(45, 20, 5);
        graphics.endFill();
        // 車体を書く
        graphics.beginFill(_fillColor);
        graphics.moveTo(0, 10);
        graphics.lineTo(15, 0);
        graphics.lineTo(30, 0);
        graphics.lineTo(40, 10);
        graphics.lineTo(50, 10);
        graphics.lineTo(55, 15);
        graphics.lineTo(55, 20);
        graphics.lineTo(0, 20);
        graphics.endFill();
    }
}

Forked