ruby - 使用 ruby/gosu 窗口增加屏幕计数器
问题描述
我正在尝试制作一个非常简单的点击计数器,但我一直坚持让点击计数器增加,无论是在屏幕上还是在代码本身中。
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”功能,但是我一直无法弄清楚如何使其工作。任何帮助将不胜感激,谢谢。
解决方案
你是如此接近拥有它!您需要添加@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
所有正确的想法都在那里!干得好!如果您不确定为什么要这样做,请告诉我,我很乐意进一步解释!希望我有所帮助:)
推荐阅读
- ionic-framework - Ionic ion-checkbox [(ngModel)]="!item.open" 它不起作用
- amazon-web-services - 使用 CloudFormation 时 NodeGroup 未加入 EKS 集群
- php - 如何在一个实例类php中使用多个函数
- error-handling - 我应该在我的 Rust API 中抽象错误类型吗?
- python - 如何将 MySQL 数据库连接到输入函数
- azure - Powershell 和 cloudshell 上的 Get-AzSnapshot 问题
- php - 使用 Sweetalert 的搜索页面
- php - POST 到 PHP 成功但 PHP 代码未执行
- javascript - 单击按钮如何在服务器上运行代码?
- c# - 如何优化以下哈希函数以防止冲突