有Gosu教程的问题,可能不只是语法错误

时间:2022-02-06 18:22:31

I've been trying out the Gosu tutorial so I can learn to make games. I'm getting errors with my code. Could someone point out to me what I'm doing wrong? Here's the tutorial link:

我一直在尝试Gosu教程,所以我可以学习制作游戏。我的代码出错了。有人能向我指出我做错了什么吗?这是教程链接:

https://github.com/jlnr/gosu/wiki/Ruby-Tutorial

https://github.com/jlnr/gosu/wiki/Ruby-Tutorial

here's my code:

这是我的代码:

require 'Gosu'

class GameWindow < Gosu::Window

        def initialize
        super 640, 480, false
        self.caption = "Gosu Tutorial Game"

        @background_image = Gosu::Image.new(self, "Usable  Images/final_fantasy_background.png", true)

        @player = Player.new(self)
        @player.warp(320, 240)

        @Star_anim = Gosu::Image::load_tiles(self, "Usable Images/donut.png", 25, 25, false)
        @Star = Array.new
    end

    def update
        if button_down? Gosu::KbLeft or button_down? Gosu::GpLeft then
            @player.turn_left
        end

        if button_down? Gosu::KbRight or button_down? Gosu::GpRight then
                @player.turn_left
        end

        if button_down? Gosu::KbUp or button_down? Gosu::GpButton0 then
            @player.accelerate
        end
        @player.move
        @player.collect_stars(@stars)

        if rand(100) < 4 and @Star.size < 25 then
            @Star.push(Star.new(@Star_anim))
        end
    end

    def draw
        @background_image.draw(0,0,ZOrder::Background)
        @player.draw
        stars = Star.new()
        @stars.each{ |star| star.draw}
    end

    def button_down(id)
        if id == Gosu::KbEscape
            close
        end
    end
end

 class Player
    def initialize(window)
        @image = Gosu::Image.new(window, "Usable Images/eric_cartman.png", false)
        @x = @y = @vel_x = @vel_y = @angle = 0.0
        @score = 0
    end

    def warp(x, y)
        @x, @y = x, y
    end

    def turn_left
        @angle -= 4.5
    end

    def turn_right
        @angle += 4.5
    end

    def accelerate
        @vel_x += Gosu::offset_x(@angle, 0.5)
        @vel_y += Gosu::offset_x(@angle, 0.5)
    end

    def move
        @x += @vel_x
        @y += @vel_y

        @x %= 640
        @y %= 480

        @vel_x *= 0.95
        @vel_y *= 0.95
    end

    def draw
        @image.draw_rot(@x, @y, 1, @angle)
    end

    def score
        @score
    end

    def collect_Star(star)
        if Star.reject! {|star| Gosu::distance(@x, @y, Star.x, star.y) < 35} then
            @score += 1
        end
    end
end

module ZOrder
    Background, Star, Player, UI = *0..3
end

class Star
    attr_reader :x, :y

    def initialize(animation)
        @animation = animation
        @color = Gosu::Color.new(0xff000000)
        @color.red = rand(256 - 40) + 40
        @color.green = rand(256 - 40) + 40
        @color.blue = rand(256 - 40) + 40

        @x = rand * 640
        @y = rand * 480
    end

    def draw
        img = @animation[Gosu::milliseconds / 100 % @animation.size];
        img.draw(@x - image.width / 2.0, @y - img.height / 2.0, ZOrder::Star, 1, 1, @color, :add)
    end
end

window = GameWindow.new
window.show

1 个解决方案

#1


0  

You have Star.new(), but you define it as initialize(animation) (with one mandatory argument).

你有Star.new(),但是你把它定义为初始化(动画)(带有一个强制参数)。

#1


0  

You have Star.new(), but you define it as initialize(animation) (with one mandatory argument).

你有Star.new(),但是你把它定义为初始化(动画)(带有一个强制参数)。