【问题标题】:Better way to write this code编写此代码的更好方法
【发布时间】:2017-04-10 10:14:56
【问题描述】:

我正在为菜单项目设计用户界面。我尝试使用for-loop,例如:

for i in 0..8
    i=i
end
for k in 0..7
    k=k
end

if @selection==i && @unlock==k && $switches[(what do I do here?)]==?????
do thing

当用户按下Y键时,它会关闭一个功能;如果@selection==1 突出显示并且用户按下“Y”键,则应关闭该特定位置的相应开关。 @unlock 只是用来表示,除非此全局布尔值设置为 true,否则用户可以按“Y”并打开或关闭此开关。

【问题讨论】:

  • 首先,你可以用foo替换像foo==true这样的所有语句,用!foo替换像foo==false这样的语句

标签: ruby user-interface graphics interface menu


【解决方案1】:

首先,您可以将每个 if else 更改为以下内容:

BITMAP_PATH = "Graphics/Pictures/Input Map/switch"
if @selection==1 && @unlock1
  pbSEPlay("BW2MenuChoose",65)
  bitmap_switch = $switches[310] ? 'off' : 'on' # sets path to off/on
  @graphics["switch"].setBitmap(BITMAP_PATH + bitmap_switch)
  !$switches[310] # it changes value of boolean to opposite value
end

只有一个条件的选择可以这样写:

if @selection==0 && @unlock0
 pbSEPlay("buzzer",65)
end

您也可以尝试为@selection 编写 case 表达式。也许你可以把它弄得更干一些,但我不太明白每个 @unlock 的用途。

编辑:

  BITMAP_PATH = "Graphics/Pictures/Input/switch"
  SELECTION_SWITCHES = [nil, 310, 300, 339, 338, 330, 318]
  def pbChangeSwitch
    case 
    when 0
      case @selection
      when 0,7
        pbSEPlay("buzzer",65) if instance_variable_get("@unlock#{@selection}")
      when 1..6
        if instance_variable_get("@unlock#{@selection}")
          pbSEPlay("BW2MenuChoose",65)
          bitmap_switch = $switches[SELECTION_SWITCHES[@selection]] ? 'off' : 'on'
          @sprites["switch"].setBitmap(BITMAP_PATH + bitmap_switch)
          index = SELECTION_SWITCHES[@selection]
          $switches[index] = !$switches[index]
        end
      end
      Graphics.update

请在最后一行添加$bitmap_switch 不能是truefalse,因为你添加到BITMAP_PATH,所以它必须是'off' 或'on'。

【讨论】:

  • 解锁是我在同一个类的方法开头设置的一个布尔值,它基本上表示如果这个开关已经打开,那么这个布尔值将保持打开状态。通常在 else 语句中,如果开关关闭,则将解锁,但我只是让它始终保持打开状态。此外,我确实最终使用了一个带有案例@selection 的案例,但我真的很困惑这是否适用于您介绍的新代码:i.gyazo.com/fdc7606d40744a0c11aa3e613b329a58.png
  • 对不起,我在bitmap_switch 中使用了@switches 而不是$switches。你也可以写when 1..6而不是1,2,3...
  • 你也可以使用instance_variable_get作为@unlock。 instance_variable_get("@unlock#{@selection}")
  • 现在唯一剩下的问题是有多个 Switch 必须打开/关闭,这取决于你当前处于什么选择,因为 $switches[310] 只对应于 selection==1 . selection==2 对应于 $switches[300],这让我很难使用 for 循环,因为它们没有以我可以利用的方式排序:i.gyazo.com/164e08ab3fe419219f5d7334aabde0c1.png
  • 我怎么称呼这正是我最关心的问题?我以前从未做过这样的事情,所以这对我来说是全新的,并且在某种程度上令人兴奋。所以我想我应该问一下,我会在哪里调用它以及如何调用它?
猜你喜欢
  • 2013-01-14
  • 2017-08-19
  • 2020-01-29
  • 2010-12-08
  • 2012-05-08
  • 1970-01-01
  • 2011-11-19
  • 2013-04-07
  • 2018-05-30
相关资源
最近更新 更多