Уважать столкновения повсюду

Я реализовал некоторые, казалось бы, основные анимации для платформера с боковой прокруткой в ​​haxe, используя flixel.tweens.FlxTween. Например:

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. Тем не менее, спрайт будет радостно и без разбора пронзать мою карту тайла и другие спрайты, игнорируя столкновения, которые обычно работают вне подростка. Я предпринял попытку анимации скорости:

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 ответ

Решение

Попробуй это:

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

Я не знаю, будет ли это работать так, как вы ожидаете: анимация изменяет скорость с течением времени - она ​​не будет перемещать спрайт в нужное место. Для движения со столкновением лучший маршрут должен избегать FlxTweens, так как они полностью игнорируют FlxCollision.

Если вы должны использовать FlxTween для движения, идеальным было бы бросить ваше собственное обнаружение столкновения.

Другие вопросы по тегам