在整个haxeflixel tween

时间:2015-04-24 16:25:18

标签: haxe tween haxeflixel

我使用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 } );
}

这可以按预期工作 - 精灵向前推进50px向上10px。然而,精灵会愉快而无差别地通过我的tilemap和其他精灵,忽略所有在补间之外正常工作的碰撞。我试图补间速度:

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调用。)

概述哪些特定属性可以补发的文档,我和解决方案一样。我已经实现了没有补间的相同功能,但是,现在我只需要知道这是否可行。

1 个答案:

答案 0 :(得分:2)

试试这个:

deco(toy.graph)
toy.graph
## IGRAPH UN-- 5 5 -- 
## attr: name (v/c)

V(toy.graph)$color
## NULL

我不知道它是否会像你期望的那样工作:补间会在一段时间内改变速度 - 它不会将精灵移动到所需的位置。对于碰撞运动,最好的方法是避免使用FlxTweens,因为它们完全忽略了FlxCollision。

如果必须使用FlxTween进行移动,理想情况是滚动自己的碰撞检测。