使用ruby/gosu窗口增加屏幕计数器

使用ruby/gosu窗口增加屏幕计数器,ruby,click,increment,libgosu,Ruby,Click,Increment,Libgosu,我正在尝试制作一个非常简单的点击计数器,我一直在努力让点击计数器递增,无论是在屏幕上还是在代码中 require 'rubygems' require 'gosu' module ZOrder BACKGROUND, MIDDLE, TOP = *0..2 end WIN_WIDTH = 640 WIN_HEIGHT = 400 class GameWindow < Gosu::Window def initialize super(WIN_WIDTH

我正在尝试制作一个非常简单的点击计数器,我一直在努力让点击计数器递增,无论是在屏幕上还是在代码中

require 'rubygems'
require 'gosu'

module ZOrder
    BACKGROUND, MIDDLE, TOP = *0..2
end

WIN_WIDTH = 640
WIN_HEIGHT = 400

class GameWindow < Gosu::Window
    def initialize
        super(WIN_WIDTH, WIN_HEIGHT, false)
        @background = Gosu::Color::WHITE
        @button_font = Gosu::Font.new(20)
        @info_font = Gosu::Font.new(15)
    end

    def needs_cursor?
        true
    end

    def draw
        Gosu.draw_rect(0, 0, WIN_WIDTH, WIN_HEIGHT, @background, ZOrder::BACKGROUND, mode=:default)

        Gosu.draw_rect(50, 50, 100, 50, Gosu::Color::GREEN, ZOrder::MIDDLE, mode=:default)
        Gosu.draw_rect(50, 150, 100, 50, Gosu::Color::GREEN, ZOrder::MIDDLE, mode=:default)

        @button_font.draw("Click me", 65, 65, ZOrder::TOP, 1.0, 1.0, Gosu::Color::BLACK)
        @button_font.draw("Reset", 75, 165, ZOrder::TOP, 1.0, 1.0, Gosu::Color::BLACK)

        @info_font.draw("Clicks: #{counter}", 160, 50, ZOrder::TOP, 1.0, 1.0, Gosu::Color::BLACK)
    end

    def counter
        i += 1
        i
    end

    def mouse_over_button?(mouse_x, mouse_y)
        if ((mouse_x > 50 and mouse_x < 150) and (mouse_y > 50 and mouse_y < 100))
          true
        else
          false
        end
    end

    def button_down(id)

        case id
        when Gosu::MsLeft
          if mouse_over_button?(mouse_x, mouse_y)
            counter
          else
            counter
          end
        end
    end


end

GameWindow.new.show
需要“rubygems”
需要“gosu”
模块ZOrder
背景、中间、顶部=*0..2
结束
宽度=640
WIN_高度=400
类GameWindow50,鼠标_x<150)和(鼠标_y>50,鼠标_y<100))
真的
其他的
假的
结束
结束
def按钮按下(id)
病例id
当Gosu::MsLeft时
如果鼠标悬停在按钮上?(鼠标悬停x,鼠标悬停y)
柜台
其他的
柜台
结束
结束
结束
结束
GameWindow.new.show

我知道我的问题很可能在于“计数器”功能和“按钮按下”功能,但我无法找出如何使其工作。任何帮助都将不胜感激,谢谢。

你就快得到了!您需要添加
@counter=0
进行初始化。然后将您的
def计数器
更改为如下所示

def counter
    @counter += 1 
end
def reset
    @counter = 0  
end
要使重置按钮正常工作,我们现在可以执行另一个名为
def reset
的程序,如下所示

def counter
    @counter += 1 
end
def reset
    @counter = 0  
end
然后将
def mouse\u over\u按钮?(mouse\u x,mouse\u y)
更改为以下内容:

def mouse_over_button?(mouse_x, mouse_y)
    if  ((mouse_x > 50 and mouse_x < 150) and (mouse_y > 50 and mouse_y < 100))
      return_value = 1
      return return_value
    elsif ((mouse_x > 50 and mouse_x < 150) and (mouse_y > 150 and mouse_y < 200))
      return_value = 2
      return return_value
    end
end
def button_down(id)
    case id
    when Gosu::MsLeft
     if mouse_over_button?(mouse_x, mouse_y) == 1
        counter
      elsif  mouse_over_button?(mouse_x, mouse_y) == 2
        reset
      end
    end
end

所有正确的想法都在那里!干得好!如果你不确定为什么会这样做,请告诉我,我很乐意进一步解释!希望我能帮忙:)

这太好了。谢谢