- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这是我的代码的当前状态,虽然我得到了预期的效果,但它并没有按照我需要的方式工作。因为该程序处于无限循环中,显然它会不断地在彼此之上产生两个背景渐变,并且每个循环都会产生 10 个圆圈,并且它们很快就会过度产生并立即减慢程序速度。
这里是:
Shoes.app ( :title => 'Circles', :width => 500, :height => 500, :resizable => false ) do
i = 0
# Animation loop
animate ( 24 ) do |i|
# Variables For Randomized Colours
randomCol = rgb( ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand )
randomCol2 = rgb( ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand )
randomCol3 = rgb( ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand )
randomCol4 = rgb( ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand )
background randomCol..randomCol2
fill randomCol3
stroke randomCol4
strokewidth ( 0..5 ).rand
# Generate 10 circles per loop cycle
10.times{
i += 1
oval :left => ( -5..self.width ).rand,
:top => ( -5..self.height ).rand,
:radius => ( 1..100 ).rand
} end
end
我已经尝试了我能想到的,但我对 Ruby 的语法并不太熟悉,或者我用 Ruby 能做的鞋子能做或不能做的事情。非常感谢关于从这里去哪里的一些建议。
最佳答案
您绘制的每个椭圆和背景在内存中都是一个单独的项目,这意味着它们会在一段时间后陷入困境。如果你只是想显示你画的最后一帧,那么你需要每次都清空应用程序:
Shoes.app ( :title => 'Circles', :width => 500, :height => 500, :resizable => false ) do
# Animation loop
animate ( 24 ) do |i|
app.clear
# Variables For Randomized Colours
randomCol = rgb( ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand )
randomCol2 = rgb( ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand )
randomCol3 = rgb( ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand )
randomCol4 = rgb( ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand )
background randomCol..randomCol2
fill randomCol3
stroke randomCol4
strokewidth ( 0..5 ).rand
# Generate 10 circles per loop cycle
10.times do |i|
i += 1
oval :left => ( -5..self.width ).rand,
:top => ( -5..self.height ).rand,
:radius => ( 1..100 ).rand
end
end
end
这不像你原来的那样酷(除了它会无限期运行的事实),因为你不再有分层效果。那样的话,我们可以让它跑几次再清零。在此示例中,它将每六次清除一次:
Shoes.app ( :title => 'Circles', :width => 500, :height => 500, :resizable => false ) do
# Animation loop
animate ( 24 ) do |i|
app.clear if (i % 6 == 0)
# Variables For Randomized Colours
randomCol = rgb( ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand )
randomCol2 = rgb( ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand )
randomCol3 = rgb( ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand )
randomCol4 = rgb( ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand )
background randomCol..randomCol2
fill randomCol3
stroke randomCol4
strokewidth ( 0..5 ).rand
# Generate 10 circles per loop cycle
10.times do |i|
i += 1
oval :left => ( -5..self.width ).rand,
:top => ( -5..self.height ).rand,
:radius => ( 1..100 ).rand
end
end
end
现在一个更有趣的策略是保留最后的 n
遍并清除最旧的,这样我们在屏幕上总是有,比如说,6 层(我发现 6 是一个好的截止点,但您的意见(和计算机的性能!)可能会有所不同:
Shoes.app ( :title => 'Circles', :width => 500, :height => 500, :resizable => false ) do
n = 6
@layers = []
n.times { @layers << [] }
# Animation loop
animate ( 24 ) do |i|
oldest = i % n
# Clear out oldest frame
@layers[oldest].each {|x| x.remove}
@layers[oldest] = []
# Variables For Randomized Colours
randomCol = rgb( ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand )
randomCol2 = rgb( ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand )
randomCol3 = rgb( ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand )
randomCol4 = rgb( ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand, ( 0..255 ).rand )
@layers[oldest] << background(randomCol..randomCol2)
fill randomCol3
stroke randomCol4
strokewidth ( 0..5 ).rand
# Generate 10 circles per loop cycle
10.times do |i|
@layers[oldest] << oval (:left => ( -5..self.width ).rand,
:top => ( -5..self.height ).rand,
:radius => ( 1..100 ).rand)
end
end
end
关于ruby - 我怎样才能使这双鞋的代码不至于使计算机陷入困境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/988903/
我的问题是关于“para”对象。我在哪里可以找到 para 的所有方法?我尝试了 shoesrb.com 手册,但它只说 para 用于呈现文本。我也在 Freenode 尝试了#shoes,但没有人
我正在试验 ruby,发现了一个名为 Shoes 的图形用户界面工具包。 我使用的是 Windows 8,我想在 Shoes 中创建一个按钮并让它在单击时播放音频文件。 我使用的非鞋子 ruby
用于 Ruby 的 Shoes GUI 工具包似乎是一种非常好的和简单的方法,可以将 GUI 添加到我的各种脚本中,但是在我的头撞到它之后,我似乎无法通过循环不断更新段落。 这是展示我正在尝试做的事情
我是一名优秀的程序员,十分优秀!