2017-05-20 7 views
1

「Rubyでゲームプログラミングを学ぼう」 練習の1つは、ゴスをイメージに読み込んで画面の端から跳ね返すことです。私は練習を続け、画像は上と左のコーナーからうまくバウンスしますが、しばらくの間、画面の端を越えて下側と右側から跳ね返ります。Ruby/Gosuがバウンシングイメージを取得する

require 'gosu' 

class Window < Gosu::Window 
def initialize 
super(800, 600) 
self.caption = 'First Game' 
@blueheart = Gosu::Image.new('blueheart.png') 
@x = 200 
@y = 200 
@width = 50 
@height = 43 
@velocity_x = 2 
@velocity_y = 2 
@direction = 1 
end 

def update 

@x += @velocity_x 
@y += @velocity_y 
@velocity_x*= -1 if @x + @width /2 > 800 || @x - @width/2 < 0 
@velocity_y*= -1 if @y + @height /2 > 600 || @y - @height/2 < 0 


end 



def draw 
@blueheart.draw(@x - @width/2, @y - @height/2, 1) 
end 

end 
window = Window.new 

window.show 

私はそれがルビーは画像の座標として画像の右上隅を使用する方法とは何かを持っていると思いますが、私は

@blueheart.draw(@x - @width/2, @y - @height/2, 1) 

はどのようにすることができ、それを修正することになったと思いましたそれは私が望むように動作させる? ありがとうございました

+0

私はこれがnoobの質問だと確信していますが、私はそれについて具体的に何か情報を見つけることはできません... –

答えて

0

問題は自分のスプライトを作成して、高さと幅の値が異なることに気付かずに来ました。

コードを@width = @ blueheart.widthに変更すると、私はクラッシュしました しかし、私はちょうど適切な幅と高さに値を変更し、問題を修正しました。 @width = 50と@height = 43という値は、本の中で異なるスプライトサイズを参照していました。

関連する問題