Увеличьте счетчик на экране окном ruby ​​/ gosu - PullRequest
0 голосов
/ 30 сентября 2018

Я пытаюсь сделать очень простой счетчик кликов, и я застрял при увеличении счетчика кликов, как на экране, так и в самом коде.

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

Я знаю, что моя проблема, скорее всего,лежит в функции «counter» и «button_down», однако я не смог понять, как заставить это работать.Любая помощь будет оценена, спасибо.

1 Ответ

0 голосов
/ 30 сентября 2018

Ты был так близок к этому!Вам нужно добавить @counter = 0 для инициализации.Затем измените ваш def counter на показанный ниже

def counter
    @counter += 1 
end

Чтобы заставить работать кнопку сброса, теперь мы можем сделать еще одну процедуру под названием def reset, как показано ниже

def reset
    @counter = 0  
end

Затемзаставьте все это работать, измените def mouse_over_button?(mouse_x, mouse_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) на следующее:

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

Все правильные идеи были там!Хорошо сделано!Если вы не уверены, почему что-то из этого было сделано, просто дайте мне знать, и я с удовольствием объясню это дальше!Надеюсь, я помог:)

...