0

Gosu (Ruby バージョン 2.5.5) を使用して最初のゲームを作成しています。マップを作成しましたが、カーソルによるスクロールを実装したいと考えています。Gosu の例「Cptn Ruby」をガイドとして使用すると、ある程度成功しました。

これが私がこれまでに持っているものです。

def update 
    # map.width is the number of background tiles in each row and map.height is the number of tiles in 
    # each column. Each tile is 14x14 pixels. 

    @camera_x = [[self.mouse_x - (WIDTH / 2), 0].max, @map.width * 14 - WIDTH].min
    @camera_y = [[self.mouse_y - (HEIGHT / 2), 0].max, @map.height * 14 - HEIGHT].min

end 

def draw

    @cursor.draw(self.mouse_x, self.mouse_y, 100, scale_x = 0.65, scale_y = 0.65)
    Gosu.translate(-@camera_x, -@camera_y) {@map.draw}

end

これはスクロールしますが、最大ポイントまでしかスクロールしません。カーソルが画面の下部に到達すると、camera_y の値は 239 より大きくなりません (同じ問題が camera_x にも当てはまります)。次のように値に 2 を掛けることで、スクロール距離を増やすことができます。

@camera_y = [[(self.mouse_y - (HEIGHT / 2) * 2, 0].max, @map.height * 14 - HEIGHT].min

ただし、このアプローチでさらにスクロールすると、まだ停止します。マウスが画面の下 (または横) にある間、連続してスクロールしたいと思います。gosu::update は 1 秒あたり 60 回実行されるため、なぜまだこれを行っていないのか、私は混乱しています。カーソルが正しい場所にある場合、実行するたびに @camera_y および/または @camera_x 変数に追加されると思っていましたが、そうではありません。

私もこれを試しました:

if self.mouse_y > (HEIGHT * 0.67)  # if mouse is in lower 3rd of screen
    @camera_y += 10
end

これは、スクロールを連続的にではなく、10 ピクセルだけ移動するだけです。

これはループで簡単に実行できましたが、Gosu の更新または描画でループが発生すると、プログラムがクラッシュすることがわかりました。

何かご意見は?

4

1 に答える 1