2

だから、私は Pygame を使って Python で 2D トップビュー ゲームを作っています。プレイヤーが画面の中央に留まるようなカメラの動きを作成しようとしています。どうすればいいですか?画面の表面にブリットされる単一の表面に「マップ」を入れたいと思います。そうすることで、一度マップを作成してから、プレイヤーが常に画面の中央に留まるように位置を調整することができます。私のプレーヤーは、次のように位置を更新します。

   def update(self, dx=0, dy=0):
        newpos = (self.pos[0] + dx, self.pos[1] + dy)  # Calculates a new position
        entityrect = pygame.Rect(newpos, self.surface.get_size())  # Creates a rect for the player
        collided = False
        for o in self.objects:  # Loops for solid objects in the map
            if o.colliderect(entityrect):
                collided = True
                break

        if not collided:
            # If the player didn't collide, update the position
            self.pos = newpos

        return collided

私はこれを見つけましが、それは横向きのプラットフォーマー用でした。したがって、私のマップは次のようになります。

map1 = pygame.Surface((3000, 3000))
img = pygame.image.load("floor.png")
for x in range(0, 3000, img.get_width()):
    for y in range(0, 3000, img.get_height()):
        map1.blit(img, (x, y))

では、カメラの動きはどうすればよいでしょうか。どんな助けでも大歓迎です。

PS。私がここで尋ねていることを理解していただければ幸いです。英語は私の母国語ではありません。=)

4

1 に答える 1

2

マップやプレーヤーの描画方法は示していませんが、次のようなことができます。

camera = [0,0]
...
def update(self, dx=0, dy=0):
    newpos = (self.pos[0] + dx, self.pos[1] + dy)  # Calculates a new position
    entityrect = pygame.Rect(newpos, self.surface.get_size())
    camera[0] += dx
    camera[1] += dy
    ...

次に、このようにマップを描画します

screen.blit(map1, (0,0), 
            (camera[0], camera[1], screen.get_width(), screen.get_height())
           )

このようにして、マップはカメラの反対方向にスクロールし、プレイヤーは静止したままになります。

プレイヤーを自分の世界では動かしたくないが、画面では動かしたくない場合は、次のようにすることができます。

screen.blit(player, (player.pos[0]-camera[0], player.pos[1]-camera[1]))
于 2013-08-16T17:14:40.810 に答える