首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >增加一个带有红宝石/丝瓜窗口的屏幕上计数器

增加一个带有红宝石/丝瓜窗口的屏幕上计数器
EN

Stack Overflow用户
提问于 2018-09-30 06:38:26
回答 1查看 251关注 0票数 2

我正在尝试做一个非常简单的点击计数器,我被困在让点击计数器增加,无论是在屏幕上还是在代码本身。

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

我知道,我的问题很可能是‘计数器’函数和'button_down‘函数,但我一直无法找到如何使它工作。任何帮助都将不胜感激,谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-30 13:12:22

你差点就有了!您需要添加@counter = 0来初始化。然后将您的def counter更改为如下所示

代码语言:javascript
复制
def counter
    @counter += 1 
end

要使您的重置按钮正常工作,我们现在可以进行另一个名为def reset的过程,如下所示

代码语言:javascript
复制
def reset
    @counter = 0  
end

然后,要使其全部工作,请将def mouse_over_button?(mouse_x, mouse_y)更改为:

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

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

所有正确的想法都在那里!干得好!如果你不知道为什么这样做,请让我知道,我很高兴进一步解释!希望我有所帮助:)

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

https://stackoverflow.com/questions/52575310

复制
相关文章

相似问题

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