Как я могу прыгнуть на драгоценный камень Gosu от Ruby?

Я пытаюсь воссоздать простую игру, но я застрял в тот момент, когда пытаюсь сделать прыжок моего персонажа (или игрока). Я проверял пример из Госу, но мне это не совсем понятно. Кто-нибудь может мне помочь?

Вот мой код окна:

class Game < Gosu::Window
  def initialize(background,player)
    super 640,480
    self.caption = "My First Game!"
    @background = background
    @player = player
    @player.warp(170,352)
    @x_back = @y_back = 0
    @allow_to_press = true
  end
# ...
def update
#...
   if Gosu.button_down? Gosu::KbSpace and @allow_to_press
      @allow_to_press = false
      @player.jump

    end



    end
end

Тогда мой класс игрока:

class Player
  def initialize(image)
    @image = image
    @x = @y = @vel_x = @vel_y = @angle = 0.0
    @score = 0
  end
  def warp(x,y)
    @x,@y = x,y
  end

  def draw

    @image.draw_rot(@x,@y,1,@angle,0.5,0.5,0.3,0.3)
  end
  def jump
    #@y -= 15 # THIS IS NOT CORRECT
  end
end

По сути, идея заключается в том, что когда вы нажимаете "Пробел", вызывается метод прыжка, и здесь я должен иметь возможность воссоздать анимацию, чтобы переместить положение "у" вверх (например, на 15 пикселей), а затем снова опуститься. Просто я имею в виду изменить значение переменной @y, но я не знаю, как сделать это с анимацией, а затем вернуться к исходной точке.

Спасибо!

1 ответ

Решение

Наконец то я понял!

Что я сделал, так это разделил переход и метод обновления внутри проигрывателя:

class Player
  def initialize(image)
    @image = image
    @x = @y   = @angle = 0.0
    @score = @vel_y = @down_y = 0
    @allow = true
  end
  def warp(x,y)
    @x,@y = x,y
  end
  def update(jump_max)
      #Jump UP
      if @vel_y > 0
        @allow = false
        @vel_y.times do
          @y-=0.5
        end
        @vel_y-=1
      end

      #Jump DOWN
      if @vel_y < 0
        (@vel_y*-1).times do
          @y+=0.5
        end
        @vel_y+=1
      end
      check_jump
  end
  def draw
    @image.draw_rot(@x,@y,1,@angle,0.5,0.5,0.3,0.3)
  end
  def jump(original)
     @vel_y = original
     @down_y = original * -1

  end
  def check_jump
    if @vel_y == 0 and @allow == false
        @vel_y = @down_y
        @down_y = 0
        @allow = true
      end
    end
end

А потом в моем классе игры

...

def initialize(background,player,enemy_picture)
    #size of the game
    super 640,480

    @original_y = 352
    @original_x = 170
    self.caption = "Le Wagon Game!"
    @background = background


       @player = player
        @player.warp(@original_x,@original_y)
        @enemy_anim = enemy_picture
        @enemy = Array.new
        #Scrolling effect
        @x_back = @y_back = 0
        @jump = true
        @jumpy = 25
      end

def update      
    if Gosu.button_down? Gosu::KbSpace and @jump
      @jump = false
       @player.jump(@jumpy)
    end
    @player.update(@jumpy)
end
def button_up(id)
    if id == Gosu::KbSpace
      @jump = true
    end
    super
  end

end

Так что теперь я могу нажать пробел, и он идет вверх, после завершения перехода, он идет вниз

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