2012-05-05 2 views
0

Я использую Flixel Power Tools для моего нового проекта, чтобы быть конкретным Я использую FlxControl.
Я попытался установить кнопку перехода с помощью FlxControl.player1.setJumpButton(), но это не сработает.
Я пытался использовать его как это:FlxControl.player1.setJumpButton не работает должным образом

player = new FlxSprite(FlxG.width/2 - 5); 
      player.makeGraphic(10,12,0xffaa1111); 
      add(player); 
      if (FlxG.getPlugin(FlxControl) == null) 
      { 
       FlxG.addPlugin(new FlxControl); 
      } 

      FlxControl.create(player, FlxControlHandler.MOVEMENT_ACCELERATES, FlxControlHandler.STOPPING_DECELERATES, 1, true, false); 

      FlxControl.player1.setCursorControl(false, false, true, true); 

      FlxControl.player1.setJumpButton("SPACE", FlxControlHandler.KEYMODE_PRESSED, 200, FlxObject.FLOOR, 250, 200); 

      FlxControl.player1.setBounds(16, 0, 288, 240); 

      FlxControl.player1.setMovementSpeed(400, 0, 100, 200, 400, 0); 

      FlxControl.player1.setGravity(0, 400); 

Примечание: клавиши со стрелками (слева направо) & работают, как и ожидалось.
Edit:
Полный PlayState.as код на github.com: Github PlayState.as code

ответ

1

Проблема заключается в вашей update() функции. Вам нужно позвонить super.update() перед тем FlxG.collide():

override public function update():void 
{ 
    super.update(); 
    FlxG.collide(player, level); 
} 
+0

ok..I косяка действительно объяснить, что, 2 дней поиска, отладки, попросив только из-за этого? На самом деле, это первое, что я узнал о фликселе, спасибо, товарищ! – Abdulaziz

+0

Функция super.update() вызывает update() для всех добавленных объектов. (включая плеер). В качестве расширенного объекта FlxObject объект игрока получает вызов .postUpdate(). -> "touching" установлен на "none". Внутри «столкновения» ваш игрок получает флаг, что он касается земли (что позволит ему прыгать), но сразу же после этого вы вызываете super.update и снова возвращаете этот трогательный флаг. – Scrittl

0

код вы вывесили выглядит отлично. Я предполагаю, что проблема заключается в платформе, с которой вы пытаетесь спрыгнуть. Чтобы точно знать, мне нужно будет увидеть код, где вы создаете свои платформы.

Вы сказали, что FlxControl позволяет игроку прыгать при касании объекта FlxObject типа FLOOR. Является ли игрок стоящим на объекте, который разрешил коллизии устанавливать либо FLOOR, либо ANY?

Соответствующая документация (см параметр "Поверхность"):

/** 
    * Enable a jump button 
    * 
    * @param key    The key to use as the jump button (String from org.flixel.system.input.Keyboard, i.e. "SPACE", "CONTROL") 
    * @param keymode   The FlxControlHandler KEYMODE value (KEYMODE_PRESSED, KEYMODE_JUST_DOWN, KEYMODE_RELEASED) 
    * @param height   The height in pixels/sec that the Sprite will attempt to jump (gravity and acceleration can influence this actual height obtained) 
    * @param surface   A bitwise combination of all valid surfaces the Sprite can jump off (from FlxObject, such as FlxObject.FLOOR) 
    * @param repeatDelay  Time delay in ms between which the jumping can repeat (250 would be 4 times per second) 
    * @param jumpFromFall A time in ms that allows the Sprite to still jump even if it's just fallen off a platform, if still within ths time limit 
    * @param callback  A user defined function to call when the Sprite jumps 
    * @param altKey   Specify an alternative jump key that works AS WELL AS the primary jump key (TODO) 
    */ 
    public function setJumpButton(key:String, keymode:uint, height:int, surface:int, repeatDelay:uint = 250, jumpFromFall:int = 0, callback:Function = null, altKey:String = ""):void 
+0

я редактировал с целым PlayState.as – Abdulaziz

Смежные вопросы