Gosu中的鼠标和键盘输入

根据定义,游戏是互动的。Gosu通过一个简单的界面直接进行这种交互,用于检测和响应按键和鼠标按钮夏季饮食养生小常识

处理程序中的输入有两种主要方法。首先是面向事件的方法。按下按钮时,您的程序会收到一个事件,您可以做出相应的反应。第二个是检查在更新时是否按下了某个按钮。这两种技术都是完全有效的,使用最适合你的任何一种。

键和按钮常数

在后台,按钮由整数表示。这些整数代码依赖于平台,可能不应该'无法进入游戏代码。为了抽象这一点,Gosu提供了许多常数来使用。

对于每个键盘键,都有一个Gosu::Kb*常量。对于大多数密钥,这些常量的名称很容易猜测。例如,箭头键是Gosu::KbLeftGosu::KbRightGosu::KbUpGosu::KbDown。有关完整列表,请参阅Gosu模块的文档。

鼠标按钮也有类似的常数。您'll主要使用Gosu::MsLeftGosu::MsRight进行左键和右键单击。还通过Gosu::Gp*常数支持gamepads。

本文是系列文章的一部分。阅读更多关于Ruby中快速游戏原型的文章

面向事件的输入

输入事件被传送到Gosu::窗口实例。在主循环中,在调用update之前,Gosu将为已按下或释放的所有按钮传送事件。它通过调用按钮按钮方法,通过按下键或按钮的id来实现。

按钮按钮方法中,你经常发现一个case语句。这除了非常有用外,还提供了一种非常优雅和富有表现力的方式来决定根据按下或释放哪个按钮该做什么。以下是一个简短的例子,说明按钮方法可以是什么样子。它应该放置在您的Gosu::Windows子类中,并在按下escape键时关闭窗口(结束程序)。

def按钮(id)案例编号当Gosu::KbEscape关闭结束结束

简单,对?让's扩展它。这是玩家班。如果按下左右键,它可以左右移动。请注意,这个类还有按钮按钮方法。它们的工作方式就像Gosu::窗口子类中的方法一样。Gosu不知道'不知道关于玩家尽管如此,我们'将从Gosu::窗口手动调用玩家's方法's方法。这里可以找到一个完整的,可运行的示例。

班级玩家#以像素/秒为单位速度200def自加载(窗口)与U数据(39);player.png')做| f|@@图片=Gosu::图片(窗口,f,假)结束结束def初始化(窗口)@窗口=窗口@x=(@窗口宽度/2)-(@@图片宽度/2)@y=@窗口高度- @@图片高度@方向=0结束def update(增量)@x+=@方向*速度*增量@如果@x,x=0@窗口宽度- @@图片宽度@x=@窗口宽度- @@图片宽度结束结束def绘制@@图片(@x,@y,Z::玩家)结束def按钮(id)案例编号当Gosu::KbLeft@方向-=1当Gosu::KbRight@方向+=1结束结束def按钮(id)案例编号当Gosu::KbLeft@方向+=1当Gosu::KbRight@方向-=1结束结束结束

本文是系列文章的一部分。阅读更多关于Ruby中快速游戏原型的文章

查询输入

如果基于事件的输入不是你的风格,y您可以查询任何Gosu::窗口,随时查看是否按下了任何按钮或键。您可以完全忽略按钮按钮回访。

要查询Gosu::窗口以查看是否按下了键,请致电按钮?带有按钮id的方法,您要检查'd。不要'不要忘记这个电话中的问号!如果您致电按钮down(Gosu::KbLeft),则'将报告按钮按下Gosu::窗口子类。即使您没有't定义任何回调方法,父类Gosu::窗口也会。没有错误,它只会像你预期的那样工作。只需don'不要忘记这个问号!

这里是玩家类重新编写为使用按钮?而不是事件。这里有一个完整的,可运行的示例。此时,在update方法开始时检查输入。你'也会注意到这个例子较短,但在我看来,不那么优雅。

班级玩家读者:x,:y#以像素/秒为单位速度200def自加载(窗口)与U数据(39);player.png')做| f|@@图片=Gosu::图片(窗口,f,假)结束结束def初始化(窗口)@窗口=窗口@x=(@窗口宽度/2)-(@@图片宽度/2)@y=@窗口高度- @@图片高度@方向=0结束def update(增量)@方向=0如果@Windows.button?下来?(Gosu::KbLeft)@方向-=1结束如果@Windows.button?下来?(Gosu::KbRight)@方向+=1结束@x+=@方向*速度*增量@如果@x,x=0@窗口宽度- @@图片宽度@x=@窗口宽度- @@图片宽度结束结束def绘制@@图片(@x,@y,Z::玩家)结束结束

本文是系列文章的一部分。阅读更多关于Ruby中快速游戏原型的文章

鼠标输入

鼠标bUTT的处理方式与键盘和游戏垫按钮相同。你都可以用按钮查询它们吗?按钮按钮的事件。但是,只能查询鼠标移动,没有鼠标移动事件。Gosu::窗口's鼠标x鼠标y方法提供鼠标指针的x和y坐标。

请注意,X和Y坐标是相对于游戏窗口的。因此,例如,如果鼠标位于左上角,它将靠近坐标(0,0)。此外,如果鼠标指针完全在游戏窗口的之外,它仍然会报告指针相对于窗口的位置。因此,鼠标Øx鼠标Øy都可以小于零并且大于窗口的宽度或高度。

以下程序将在单击鼠标的任何位置显示新的sprite。请注意,它使用事件驱动输入(用于单击)和查询驱动输入(以获取鼠标的位置)。这里有一个完整的可运行文件。

类MyWindow