2015-10-20 61 views
2

我有一個問題,調用播放器的x位置和y位置。當我打電話origin_object.x並與類彈origin_object.y它給了我這個錯誤:未定義的方法(NoMethodError)ruby和Gosu

asteroids.rb:35:in `update': undefined method `x' for #<Player:0x007fa7c307c520> (NoMethodError) 
    from /usr/local/lib/ruby/gems/2.2.0/gems/gosu-0.10.4/lib/gosu/patches.rb:135:in `tick' 
    from /usr/local/lib/ruby/gems/2.2.0/gems/gosu-0.10.4/lib/gosu/patches.rb:135:in `tick' 
    from asteroids.rb:68:in `<main>' 

這是我的代碼:

class Player 

    attr_accessor :x, :y, :angle, :lives, :score 
    def initialize 
    @image = Gosu::Image.new("assets/nave1.png") 
    @x = @y = @vel_x = @vel_y = @angle = 0.0 
    @score = 0 #Puntaje 
    @lives = 5 #Vida 
    end 
end 

這是彈丸文件

class Projectile 
    attr_reader :x, :y, :angle 
    def initialize(origin_object) 
    @alive = true 
    @x, @y = origin_object.x, origin_object.y 
    @angle = origin_object.angle 
    @speed_modifier = 7 
    @image = Gosu::Image.new('assets/projectile.png') 
    @distance_traveled, @max_distance = 0, 50 
    end 
end 

這是主要文件(我用來運行該項目)

require 'gosu' 
require './lib/Player.rb' 
require './lib/Projectile.rb' 

class GameWindow < Gosu::Window 

    def initialize 
    super(1000, 700, false) #Creacion Pantalla 
    self.caption = "Asteroids Redes" #Titulo Pantalla 
    @font = Gosu::Font.new(self, "assets/victor-pixel.ttf", 34) 
    end 

    def setup_game 
    @player = Player.new 
    @player.warp(650, 350) 
    @game_in_progress = true 
    @projectiles = [] 
    end 

    #--------------------------------------# 
    def update 

    if Gosu::button_down? Gosu::KbQ #Salir con tecla Q 
     close 
    end 
    if button_down? Gosu:: KbP 
     setup_game unless @game_in_progress 
    end 

    if @player #si existe jugador permite moverlo 
     if Gosu::button_down? Gosu::KbSpace 
     p @player.x 
     #@projectiles << Projectile.new(p @player) 
     end 
     if Gosu::button_down? Gosu::KbLeft or Gosu::button_down? Gosu::GpLeft then 
     @player.turn_left 
     end 
     if Gosu::button_down? Gosu::KbRight or Gosu::button_down? Gosu::GpRight then 
     @player.turn_right 
     end 
     if Gosu::button_down? Gosu::KbUp or Gosu::button_down? Gosu::GpButton0 then 
     @player.accelerate 
     end 
     @player.move 
     @projectiles.each {|projectile| projectile.move} 
    end 

    end 
    #--------------------------------------# 
    def draw 
    unless @game_in_progress #Si el no se esta ejecutando muestra el menu 
     @font.draw("ASTEROIDS", 260, 220, 50, 3, 3, Gosu::Color::rgb(255, 255, 255)) 
     @font.draw("Presiona 'p' Para Jugar", 300, 320, 50, 1, 1, Gosu::Color::rgb(13, 123, 255)) 
     @font.draw("Presiona 'q' Para Salir", 305, 345, 50, 1, 1, Gosu::Color::rgb(13, 123, 255)) 
    end 
    if @player #Si existe jugador lo dibuja 
     @player.draw 
     @projectiles.each {|projectile| projectile.draw} 
    end 
    end 
    #--------------------------------------# 
end 
#........................................# 
window = GameWindow.new 
window.show 

回答

0

我已經從您的三個文件中複製了代碼,爲movedraw,accelerateturn_left/turn_right添加空方法存根,以便代碼不會立即崩潰。

當我開始遊戲並按下P,然後按空格,我在終端中看到「0.0」作爲p @player.x的結果。

你可能正在運行代碼的另一個版本,而不是你在問題中包含的內容嗎?

相關問題