首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未定义方法(NoMethodError)拼音和Gosu

未定义方法(NoMethodError)拼音和Gosu
EN

Stack Overflow用户
提问于 2015-10-21 06:01:59
回答 1查看 191关注 0票数 2

我在调用球员的x位置和y位置时遇到了问题。当我用Projectile类调用origin_object.x和origin_object.y时,它给出了这个错误:

代码语言:javascript
复制
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>'

这是我的代码:

代码语言:javascript
复制
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

代码语言:javascript
复制
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

这是主文件(我用它来运行项目)

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2017-03-27 05:58:27

我已经从您的三个文件中复制了代码,为movedrawaccelerateturn_left/turn_right添加了空的方法存根,这样代码就不会立即崩溃。

当我启动游戏并按P,然后按空格键时,我在终端中看到p @player.x的结果是"0.0“。

您是否正在运行其他版本的代码,而不是您在问题中包含的代码?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33247595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档