ActionScript:为什么我不能对角画?

时间:2014-01-06 21:13:49

标签: actionscript-3 flash actionscript drawing arrow-keys

所以,我正在学习自己的ActionScript和一本书('带有Flash的基础AS3.0 ......)。 我坚持锻炼身体 我必须使用箭头键和空格键制作绘图应用程序 它不起作用100%。我可以画,向上,向右,向左。甚至是对角线,只有右上角和左下角 你们知道我的错误在哪里吗?我也想画左上和右下.... 到目前为止,这是我的代码:

package classes{
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.events.Event;

public class KeyboardDrawing extends Sprite{
    private const PIXEL_DISTANCE_TO_DRAW:uint = 2;
    private var _canvas:Sprite;
    private var _crosshair:Shape;
    private var _xDirection:int = 0;
    private var _yDirection:int = 0;
    private var _isDrawing:Boolean = false;

    public function KeyboardDrawing(){
        _canvas=new Sprite();
        addChild(_canvas);
        _crosshair=new Shape();
        drawCrosshair();
        addChild(_crosshair);
        _canvas.graphics.lineStyle(2, 0x000000);
        stage.focus=_canvas;
        _canvas.addEventListener(KeyboardEvent.KEY_DOWN, onCanvasKeyDown);
        _canvas.addEventListener(KeyboardEvent.KEY_UP, onCanvasKeyUp);
        _canvas.addEventListener(Event.ENTER_FRAME, onCanvasEnterFrame);
    }

    private function drawCrosshair():void{
        _crosshair.graphics.lineStyle(1, 0x000000);
        _crosshair.graphics.moveTo(-5, 0);
        _crosshair.graphics.lineTo(6, 0);
        _crosshair.graphics.moveTo(0, -5);
        _crosshair.graphics.lineTo(0, 6);
    }

    private function onCanvasKeyDown(event:KeyboardEvent):void{
        switch(event.keyCode){
            case Keyboard.UP:
                _yDirection = -PIXEL_DISTANCE_TO_DRAW;
                break;
            case Keyboard.DOWN:
                _yDirection = PIXEL_DISTANCE_TO_DRAW;
                break;
            case Keyboard.LEFT:
                _xDirection = -PIXEL_DISTANCE_TO_DRAW;
                break;
            case Keyboard.RIGHT:
                _xDirection = PIXEL_DISTANCE_TO_DRAW;
                break;
            case Keyboard.SPACE:
                _isDrawing = true;
                break;
        }
    }

    private function onCanvasKeyUp(event:KeyboardEvent):void{
        switch(event.keyCode){
            case Keyboard.UP:
            case Keyboard.DOWN:
                _yDirection = 0;
                break;
            case Keyboard.LEFT:
            case Keyboard.RIGHT:
                _xDirection = 0;
                break;
            case Keyboard.SPACE:
                _isDrawing = false;
                break;
        }
    }

    private function onCanvasEnterFrame(event:Event):void{
        _crosshair.x += _xDirection;
        _crosshair.y += _yDirection;
        if (_isDrawing){
            _canvas.graphics.lineTo(_crosshair.x, _crosshair.y);
        }else{
            _canvas.graphics.moveTo(_crosshair.x, _crosshair.y);
        }
    }
  }
}

1 个答案:

答案 0 :(得分:2)

这是键盘和某些键组合的问题。

如果您将密钥更改为WASD,那么它可以正常工作:

private function onCanvasKeyDown(event:KeyboardEvent):void{
    switch(event.keyCode){
        case Keyboard.W:
            _yDirection = -PIXEL_DISTANCE_TO_DRAW;
            break;
        case Keyboard.S:
            _yDirection = PIXEL_DISTANCE_TO_DRAW;
            break;
        case Keyboard.A:
            _xDirection = -PIXEL_DISTANCE_TO_DRAW;
            break;
        case Keyboard.D:
            _xDirection = PIXEL_DISTANCE_TO_DRAW;
            break;
        case Keyboard.SPACE:
            _isDrawing = true;
            break;
    }
}

private function onCanvasKeyUp(event:KeyboardEvent):void{
    switch(event.keyCode){
        case Keyboard.W:
        case Keyboard.S:
            _yDirection = 0;
            break;
        case Keyboard.A:
        case Keyboard.D:
            _xDirection = 0;
            break;
        case Keyboard.SPACE:
            _isDrawing = false;
            break;
    }
}

基本上,由于有缺陷的键盘设计,以一些关键组合为代价简化了布线。

我发现这篇文章完全解释了它:http://www.microsoft.com/appliedsciences/antighostingexplained.mspx