目前我正在尝试在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);
}
}
我不愉快(在我看来不正确):
我更新动画的方式
即在每一帧上创建一个新的 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);