如何在OpenFL

时间:2017-01-12 19:17:37

标签: haxe openfl

目前我正在尝试在OpenFL中制作动画(没有任何框架),但我找不到任何最新的教程,在http://www.openfl.org/learn/tutorials/中你只能找到当前版本之前编写的教程。 OpenFl。

当前版本的OpenFL"我的意思是: 新的OpenFL带来了许多变化,也许最重要的一个是删除 Tilesheet 类并引入其新的替代方案 - Tilemap

然而,我没有失去希望,并试图通过完成本教程来解决这个问题  http://haxecoder.com/post.php?id=25并调整我的代码以使用 Tilemap TileSet 而不是 Tilesheet

所以最后我设法创建了一个简单的动画,但我认为它没有正常工作/这是正确的做法。

如果有人知道某个地方/链接显示如何正确制作动画,或者可以通过告诉我在下面的代码中做错了什么来帮助我,我会永远感激。

代码:

class Main extends Sprite {

    private var canvas:Sprite;
    private var tileset:Tileset;
    private var tilemap:Tilemap;

    private var steps:Array<Int>;

    private var stepCounter:Int = 0;
    private var currentX:Int = 5;
    private var currentY:Int = 5;
    private var firstFrame:Bool = true;

    public function new() {
        super();
        addEventListener(Event.ADDED_TO_STAGE, init);
    }

    private function init(e) {
        removeEventListener(Event.ADDED_TO_STAGE, init);

        tileset = new Tileset(Assets.getBitmapData("img/Character.png"));

        steps = new Array<Int>();
        steps.push(tileset.addRect(new Rectangle(0, 0, 32, 32)));
        steps.push(tileset.addRect(new Rectangle(32, 0, 32, 32)));
        steps.push(tileset.addRect(new Rectangle(64, 0, 32, 32)));

        tilemap = new Tilemap(stage.stageWidth, stage.stageHeight, tileset);
        canvas = new Sprite();

        canvas.addChild(tilemap);
        this.addChild(canvas);
        this.addEventListener(Event.ENTER_FRAME, everyFrame);
    }


    private function everyFrame(e:Event):Void {
        var t:Tile = new Tile(stepCounter, ++currentX, ++currentY);
        if (++stepCounter > 3) stepCounter = 0;

        if (!firstFrame) {
            tilemap.removeTileAt(0);
        }

        firstFrame = false;
        tilemap.addTile(t);

        trace("tilemap.numTiles = " + tilemap.numTiles);
    }
}

the Character.png: enter image description here

我不愉快(在我看来不正确): 我更新动画的方式 即在每一帧上创建一个新的 Tile 并删除 Tilemap中的最后一个 tilemap.removeTileAt(0);

以前的OpenFl版本如何处理它:

private var canvas:Sprite;
private var tilesheet:Tilesheet;
private var stepCounter = 0;

canvas = new Sprite();
addChild(canvas);
tilesheet = new Tilesheet(Assets.getBitmapData("img/set.png"));
tilesheet.addTileRect(new Rectangle(0, 0, 32, 32));
tilesheet.addTileRect(new Rectangle(32, 0, 32, 32));
tilesheet.addTileRect(new Rectangle(64, 0, 32, 32));

然后简单地添加 Event.ENTER_FRAME 功能:

if (++stepCounter > 3) stepCounter = 0;
canvas.graphics.clear();
tilesheet.drawTiles(canvas.graphics, tileData);

0 个答案:

没有答案