Cách triển khai Parallax Scrolling trong Arcade
Việc thêm hiệu ứng hình ảnh vào trò chơi của bạn có thể nâng cao đáng kể trải nghiệm của người chơi và làm cho trò chơi hấp dẫn hơn. Một kỹ thuật phổ biến để đạt được điều này là cuộn thị sai.
Cuộn thị sai tạo ảo giác về chiều sâu bằng cách di chuyển nhiều lớp hình ảnh hoặc đối tượng ở các tốc độ khác nhau, tạo cảm giác đắm chìm trong thế giới trò chơi. Việc triển khai cuộn thị sai trong trò chơi của bạn bằng thư viện Arcade không chỉ dễ dàng mà còn bổ sung thêm nét chuyên nghiệp cho các dự án của bạn.
Mục Lục
Tạo một trò chơi đơn giản
Trước khi bắt đầu, hãy đảm bảo rằng bạn đã cài đặt pip trên thiết bị của mình. Sử dụng lệnh này để cài đặt thư viện arcade:
pip install arcade
Sau đó, tạo một trò chơi đơn giản bằng thư viện Arcade. Trong trò chơi này, người chơi sẽ có thể di chuyển sang trái và phải, đồng thời sẽ có các nền tảng để người chơi tương tác.
Mã được sử dụng trong bài viết này có sẵn trong kho lưu trữ GitHub này và bạn được sử dụng miễn phí theo giấy phép MIT.
Các đơn giản-game.py kịch bản xác định một Người chơi lớp kế thừa từ arcade.Sprite lớp học. Nó đặt vị trí ban đầu và các biến chuyển động cho người chơi. Mã này cũng bao gồm một Nền tảng lớp đại diện cho các nền tảng hình chữ nhật. Mỗi nền tảng có một vị trí, kích thước và màu sắc cụ thể.
Các Trò chơi của tôi lớp chịu trách nhiệm thiết lập trò chơi, bao gồm tạo trình phát và nền tảng cũng như xử lý các sự kiện vẽ, cập nhật và đầu vào.
Đây là giao diện của trò chơi nền tảng cơ bản tại thời điểm này:
Thiết lập lớp
Để đạt được khả năng cuộn thị sai, hãy tạo các lớp khác nhau di chuyển ở các tốc độ khác nhau. Đối với ví dụ này, tạo năm lớp. Mỗi layer sẽ có tốc độ cuộn khác nhau để tạo cảm giác về chiều sâu.
class Layer(arcade.SpriteList):
def __init__(self, scroll_speed):
super().__init__()
self.scroll_speed = scroll_speedclass MyGame(arcade.Window):
def __init__(self, width, height):
super().__init__(width, height)
arcade.set_background_color(arcade.color.WHITE)
self.player = None
self.platforms = None
self.layers = []
def setup(self):
self.player = Player()
self.platforms = arcade.SpriteList()
gray = arcade.color.GRAY
red = arcade.color.RED
brown = arcade.color.BROWN
yellow = arcade.color.YELLOW
w = SCREEN_WIDTH // 2
h = SCREEN_HEIGHT // 2
self.platforms.append(Platform(w, h - 100, 200, 20, yellow))
self.platforms.append(Platform(w, h + 100, 200, 20, yellow))
layers_data = [
(Layer(0.2), Platform(w, h, 800, 600, gray)),
(Layer(0.5), Platform(w, h - 200, 400, 20, red)),
(Layer(0.5), Platform(w, h + 200, 400, 20, red)),
(Layer(1.0), Platform(w, h - 300, 200, 20, brown)),
(Layer(1.0), Platform(w, h + 300, 200, 20, brown))
]
for layer, platform in layers_data:
layer.append(platform)
self.layers.append(layer)
Để triển khai cuộn thị sai, hãy cập nhật vị trí của từng lớp dựa trên tốc độ cuộn của lớp đó và chuyển động của người chơi. Tạo một tệp mới có tên thị sai-scrolling.py và thêm mã với các bản cập nhật bên dưới:
class MyGame(arcade.Window):
def on_draw(self):
arcade.start_render()
for layer in self.layers:
layer.draw()
self.platforms.draw()
self.player.draw()
def update(self, delta_time):
self.player.update()
for layer in self.layers:
for sprite in layer:
change = self.player.change_x * layer.scroll_speed
sprite.center_x -= change
Dưới đây là đầu ra:
bên trong on_draw phương pháp, vẽ từng lớp bằng các công cụ vẽ của trò chơi điện tử trước khi vẽ nền tảng và trình phát. Điều này đảm bảo rằng các lớp hiển thị phía sau trình phát và nền tảng.
bên trong cập nhật lặp qua từng lớp và cập nhật vị trí của mọi họa tiết trong lớp dựa trên chuyển động ngang của người chơi (self.player.change_x) và tốc độ cuộn của lớp (layer.scroll_speed). Bằng cách nhân chuyển động của người chơi với tốc độ cuộn, bạn có thể đạt được hiệu ứng cuộn thị sai.
Để tạo hiệu ứng cuộn thị sai hấp dẫn trực quan hơn, bạn có thể điều chỉnh tốc độ cuộn cho các lớp khác nhau. Thử nghiệm với các tốc độ khác nhau có thể tăng thêm chiều sâu và làm cho thế giới trò chơi đắm chìm hơn.
class MyGame(arcade.Window):
def setup(self):
layers_data = [
(Layer(1.2), Platform(w, h, 800, 600, gray)),
(Layer(2.5), Platform(w, h - 200, 400, 20, red)),
(Layer(3.0), Platform(w, h + 200, 400, 20, red)),
(Layer(4.0), Platform(w, h - 300, 200, 20, brown)),
(Layer(5.0), Platform(w, h + 300, 200, 20, brown))
]
Vui lòng thử nghiệm các tốc độ cuộn khác nhau để đạt được hiệu ứng cuộn thị sai mong muốn cho trò chơi của bạn.
Bao gồm các tính năng bổ sung
Cuộn thị sai mở ra một thế giới khả năng để nâng cao trò chơi của bạn. Bằng cách kết hợp nó với các tính năng khác, bạn có thể tạo ra trải nghiệm thực sự hấp dẫn và đắm chìm. Dưới đây là một số tính năng bổ sung mà bạn có thể kết hợp vào trò chơi của mình để bổ sung cho hiệu ứng cuộn thị sai:
Hiệu ứng nền động
Bạn có thể tận dụng các lớp cuộn thị sai để thêm các hiệu ứng nền động. Ví dụ: bạn có thể mô phỏng các điều kiện thời tiết như mưa, tuyết hoặc lá rơi. Mỗi lớp có thể có một bộ hiệu ứng hạt riêng phản ứng với chuyển động của người chơi, tạo ra một môi trường sống động và chân thực hơn.
Tạo một tệp mới có tên nền-hiệu ứng.py và thêm mã với các bản cập nhật bên dưới:
class Raindrop(arcade.Sprite):
def __init__(self, x, y):
super().__init__() self.texture = arcade.make_soft_square_texture(
3, blue, outer_alpha=100)
self.center_x = x
self.center_y = y
class BackgroundLayer(arcade.SpriteList):
def __init__(self, scroll_speed):
super().__init__()
self.scroll_speed = scroll_speed
self.raindrops = arcade.SpriteList()
def update(self):
for raindrop in self.raindrops:
raindrop.center_y -= self.scroll_speed * 5
if raindrop.center_y < -10:
raindrop.remove_from_sprite_lists()
def draw(self):
super().draw()
self.raindrops.draw()
class MyGame(arcade.Window):
def __init__(self, width, height):
super().__init__(width, height)
arcade.set_background_color(arcade.color.WHITE)
self.background_layer = BackgroundLayer(0.2)
def setup(self):
self.background_layer.raindrops.append(
Raindrop(SCREEN_WIDTH // 2, SCREEN_HEIGHT + 10))
def update(self, delta_time):
self.player.update()
self.background_layer.update()
def on_draw(self):
arcade.start_render()
self.background_layer.draw()
self.platforms.draw()
self.player.draw()
Đây là đầu ra:
Dưới đây là một số phương pháp hay nhất để triển khai cuộn thị sai trong trò chơi của bạn.
Lên kế hoạch cẩn thận cho các lớp của bạn
Trước khi thực hiện cuộn thị sai, hãy dành thời gian lập kế hoạch và thiết kế các lớp của bạn. Xem xét các yếu tố bạn muốn đưa vào mỗi lớp và cách chúng sẽ đóng góp vào hiệu ứng hình ảnh tổng thể. Đặt các đối tượng và nền một cách chiến lược trong các lớp khác nhau có thể tạo ra trải nghiệm sống động hơn.
Tối ưu hóa kích thước và định dạng hình ảnh
Nếu bạn quyết định sử dụng hình ảnh cho các lớp cuộn thị sai của mình, hãy tối ưu hóa kích thước và định dạng của chúng để giảm thiểu kích thước tệp và cải thiện hiệu suất. Nén hình ảnh và sử dụng các định dạng phù hợp (chẳng hạn như JPEG hoặc PNG) để giảm mức sử dụng bộ nhớ và thời gian tải.
Kiểm tra hiệu suất trên các thiết bị khác nhau
Đảm bảo rằng triển khai cuộn thị sai của bạn hoạt động tốt trên nhiều loại thiết bị và kích thước màn hình. Kiểm tra trò chơi của bạn trên các nền tảng và thiết bị khác nhau để xác định bất kỳ tắc nghẽn hiệu suất hoặc vấn đề tương thích nào.
Cân nhắc việc tối ưu hóa mã của bạn hoặc điều chỉnh số lượng và độ phức tạp của các lớp nếu cần. Cân bằng sự hấp dẫn trực quan của cuộn thị sai với khả năng sử dụng và khả năng chơi trò chơi của bạn.
Kết hợp chuyển tiếp mượt mà
Chuyển đổi mượt mà giữa các lớp có thể cải thiện chất lượng hình ảnh tổng thể của cuộn thị sai. Sử dụng các chức năng nới lỏng hoặc kỹ thuật nội suy để tạo chuyển tiếp dần dần khi người chơi di chuyển hoặc máy quay lia. Điều này có thể giúp giảm các hiệu ứng chói tai và tạo ra trải nghiệm liền mạch và dễ chịu hơn.
Bằng cách làm theo các phương pháp hay nhất này, bạn có thể đảm bảo rằng việc triển khai cuộn thị sai của mình diễn ra suôn sẻ, hấp dẫn về mặt hình ảnh và được tích hợp liền mạch vào trò chơi của bạn.
Với cuộn thị sai, bạn có thể biến một trò chơi đơn giản thành một cuộc phiêu lưu trực quan tuyệt đẹp. Cho dù đó là game platformer, game bắn súng hay game chạy vô tận, tính năng cuộn thị sai sẽ bổ sung thêm lớp đánh bóng để thu hút người chơi và khiến họ quay lại chơi nhiều hơn.
Vì vậy, hãy tiếp tục và bắt đầu triển khai cuộn thị sai trong trò chơi của bạn bằng thư viện Arcade trong Python.