1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

大きく構造の変わった HaxeFlixel 4 に対応する

Last updated at Posted at 2016-02-21

HaxeFlixel 4.0.0は3.3系から大きく変わっています

Haxe用ゲームフレームワークであるHaxeFlixelのメジャーリリースであるバージョン4.0.0が2016/02/16にリリースされました。breaking changes と書かれている通りモジュール構造が大きく変わっているので3系のコードはそのままではビルドが通らないでしょう。

"Haxe Game Development Essentials"(Jeremy McCurdy, PACKT PUBLISHING 2015)を読んでいたのですがこれもエラーがところどころ出て、いろいろ調べながらやったのでそのメモです。

公式のアップグレードガイドを参考にする

http://haxeflixel.com/documentation/upgrade-guide-4-0-0/
これで大体は対応できます。

update()が引数をとるように

一番影響が大きいのは、アップグレードガイドの一番上にもありますが、update関数が引数なしからFloat型の引数を取るようになったところでしょう。ゲームの状態を管理しているFlxState継承クラスではだいたいoverrideしているのであちこちあると思います。

override public function update(elapsed:Float):Void
	{
		super.update(elapsed);
		...		
	}

Util系static method が instance methodに

また、画面の中央に配置するscreenCenterは

FlxSpriteUtil.screenCenter(flxSprite);

が、

flxSprite.screenCenter();

のように、flxObjectがメソッドとして持つようになりました。

demoのコードをあさる

https://github.com/HaxeFlixel/flixel-demos
demoのコードはちゃんと4.0.0に対応したものになっているので適当に関数名を検索して使いかたを調べます。今回調べてわかったところなど。

FlxEmitterインスタンスのプロパティの設定

var smoke = new FlxEmitter(0, 0, maxParticles);

に対し、

smoke.setXSpeed(-100, 100);
smoke.setYSpeed(-100, 100);
smoke.setScale(0.15, 0.5, 1, 3);
smoke.setAlpha(0.25, 1, 0, 0);
smoke.setRotation( -180, 180);

としていたものは

smoke.velocity.set( -100, 100, -100, 100);
smoke.angle.set( -180, 180);
smoke.alpha.set(0.25, 1, 0, 0);
smoke.scale.set(0.15, 0.5, 1, 3);

と書くようになりました。

Textureからのアニメーション読み込み

pngとjsonで一対になったTexturePacker形式から画像を読みこんでFlxSpriteのインスタンスにアニメーションを設定する場合、

import flixel.util.loaders.TexturePackerData;
var texturePackerData = new TexturePackerData(AssetPaths.sprites__json, AssetPaths.sprites__png);
flxSprite.loadGraphicFromTexture(texturePackerData);
flxSprite.animation.addByNames("Loop", ["image01.png","image02.png"], 8);
flxSprite.animation.play("Loop");

としていたものは

import flixel.graphics.frames.FlxAtlasFrames;
var textureAtlasFrames = FlxAtlasFrames.fromTexturePackerJson(AssetPaths.sprites__png, AssetPaths.sprites__json);
flxSprite.frames = textureAtlasFrames;
sprite.animation.addByNames("Loop", ["image01.png","image02.png"], 8);
sprite.animation.play("Loop");

とFlxAtlasFramesをframesに渡すように書くようになりました。また、pngとjsonの引数順が逆になっています。
アップグレードガイドにもloadRotatedGraphicFromTexture()は removed (assign a frames collection to frames)と書かれていますがわかるまでちょっと悩みました。
アニメーションでなく単一画像をTextureから引っぱってくる場合は、

import flixel.graphics.frames.FlxAtlasFrames;
var textureAtlasFrames = FlxAtlasFrames.fromTexturePackerJson(AssetPaths.sprites__png, AssetPaths.sprites__json);
flxSprite.frames = textureAtlasFrames;
sprite.animation.frameName = "imageName.png";

でいけました。

tweenのコールバック引数を渡すフィールド名がcompleteがonCompleteに

Flx.tweenは第四引数でオプションとして匿名オブジェクト(構造体)を使ってイージングやコールバック関数を与えることが多いですが、このフィールド名がcompleteからonCompleteに変わりました。

// HaxeFlixel 3.3.x
FlxTween.tween(sprite, { x:0 }, 1.0, { ease: FlxEase.quadIn, complete: onAnimateIn } );
// HaxeFlixel 4.0.0
FlxTween.tween(sprite, { x:0 }, 1.0, { ease: FlxEase.quadIn, onComplete: onAnimateIn } );

はい

これで冒頭にあげた書籍で作るサンプルゲーム"StarWalrus"は動くようになりました。よかったですね。

ちなみにAmazonでもKindle版が売っていますが出版社からeBookを買うほうが安いです。
https://www.packtpub.com/game-development/haxe-game-development-essentials

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?