1

flixel.tweens.FlxTween を使用して、haxe で横スクロール プラットフォーマー用の一見基本的なトゥイーンをいくつか実装しました。例えば:

public static function lunge(sprite: FlxSprite) {
    var deltax:Int = sprite.facing==FlxObject.LEFT?-50:50;
    return FlxTween.tween(sprite, { x:sprite.x+deltax,y:sprite.y-10 }, 0.10, { type: FlxTween.ONESHOT } );
}

これは期待どおりに機能します。スプライトは前方に 50 ピクセル、上方に 10 ピクセル突き出します。ただし、スプライトは、トゥイーンの外では正常に機能する衝突を無視して、喜んで無差別に私のタイルマップや他のスプライトを突進します。ベロシティのトゥイーンを試みました:

public static function lungeV(sprite: FlxSprite) {
    var newVelocity:FlxPoint = new FlxPoint(sprite.velocity.x*3, -40);
    return FlxTween.tween(sprite, { velocity: newVelocity }, 0.10, { type: FlxTween.ONESHOT } );
}

これはコンパイルおよび実行されますが、関数が呼び出されると「サポートされていない操作」が表示されます (スタック トレースは、自分自身ではなく、haxe/haxeflixel コードのみを参照します)。

Unsupported operation
Called from flixel.tweens.misc.VarTween::initializeVars line 120
Called from flixel.tweens.misc.VarTween::update line 78
Called from flixel.plugin.TweenManager::update line 31
Called from flixel.FlxGame::update line 698
Called from flixel.FlxGame::step line 648
Called from flixel.FlxGame::onEnterFrame line 493
Called from openfl._legacy.events.EventDispatcher::dispatchEvent line 98
Called from a C function
Called from openfl._legacy.display.DisplayObject::__broadcast line 161
Called from a C function
Called from openfl._legacy.display.DisplayObjectContainer::__broadcast line 280
Called from openfl._legacy.display.Stage::__render line 1074
Called from openfl._legacy.display.Stage::__checkRender line 339
Called from openfl._legacy.display.Stage::__pollTimers line 1059
Called from openfl._legacy.display.Stage::__doProcessStageEvent line 414
Compilation failed.

私も使ってみました

{velocity.x: sprite.velocity.x * 3, ... }

しかし、haxeはこれが好きではありません:

Effects.hx:39: characters 36-37 : Missing ;
Effects.hx:39: characters 37-38 : Unexpected :
Effects.hx:39: characters 37-38 : Unexpected :
Compilation failed.

(わかりやすくするためにフル パスを削除しました。39 行目は FlxTween 呼び出しです。)

解決策と同様に、どの特定のプロパティをトゥイーンできるかを概説するドキュメントは私にはわかりません。トゥイーンなしで同じ機能を実装しましたが、これが可能かどうかを知る必要があります。

4

1 に答える 1

3

これを試して:

FlxTween.tween(sprite.velocity, { x: newVelocity }, 0.10, { type: FlxTween.ONESHOT } );

期待どおりに機能するかどうかはわかりませんが、トゥイーンは時間の経過とともに速度を変更します-スプライトを目的の場所に移動しません。衝突を伴う移動の場合、FlxCollision を完全に無視するため、FlxTweens を回避するのが最善の方法です。

移動に FlxTween を使用する必要がある場合は、独自の衝突検出を行うのが理想的です。

于 2015-04-24T17:26:54.907 に答える