با استفاده از یک دوربین، تجربه بازی خود را با بازیهای Python Arcade ارتقا دهید.
کتابخانه Arcade Python یک چارچوب قدرتمند و کاربرپسند برای ایجاد بازی های دو بعدی است. یکی از ویژگی های کلیدی که می تواند گیم پلی و تجربه کاربری را تا حد زیادی بهبود بخشد، اضافه شدن دوربین است. افزودن یک دوربین به بازی شما امکان دستکاری پویا در منظره را فراهم میکند و به بازیکن امکان میدهد تا جهانهای بزرگتر بازی را کاوش کند، روی مناطق خاص تمرکز کند یا اجسام در حال حرکت را ردیابی کند.
با حرکت دادن زاویه دید دوربین، میتوانید جلوههای بصری جذابی ایجاد کنید، مکانیکهای گیمپلی را بهبود ببخشید، و تجربه بازی همهجانبهتری را ارائه دهید.
یک بازی ساده بسازید
قبل از شروع، pip را روی دستگاه خود نصب کنید و از دستور زیر برای نصب ماژول آرکید استفاده کنید:
pip install arcade
اکنون، با ایجاد یک بازی اسکرول جانبی اولیه شروع کنید که در آن بازیکن شخصیتی را کنترل می کند که می تواند با استفاده از کلیدهای جهت دار به چپ و راست حرکت کند.
کد استفاده شده در این مقاله در این مخزن GitHub موجود است و برای استفاده شما تحت مجوز MIT رایگان است.
علاوه بر این، می توانید یک مانع برای حرکت بازیکن در اطراف اضافه کنید.
import arcade
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
MOVEMENT_SPEED = 5
class MyGame(arcade.Window):
def __init__(self, width, height):
super().__init__(width, height)
self.player_x = width // 2
self.player_y = height // 2
def setup(self):
arcade.set_background_color(arcade.color.SKY_BLUE)
def on_draw(self):
arcade.start_render()
arcade.draw_circle_filled(self.player_x, self.player_y, 20, arcade.color.RED)
arcade.draw_rectangle_filled(400, 200, 80, 40, arcade.color.GREEN)
def update(self, delta_time):
pass
def on_key_press(self, key, modifiers):
if key == arcade.key.LEFT:
self.player_x -= MOVEMENT_SPEED
elif key == arcade.key.RIGHT:
self.player_x += MOVEMENT_SPEED
if __name__ == "__main__":
game = MyGame(SCREEN_WIDTH, SCREEN_HEIGHT)
game.setup()
arcade.run()
راه اندازی دوربین
برای افزودن دوربین به بازی، یک کلاس Camera ایجاد کنید که موقعیت و حرکت دوربین را مدیریت می کند. این کلاس دارای ویژگی هایی مانند camera_x و camera_y برای ذخیره مختصات دوربین خواهد بود.
class Camera:
def __init__(self):
self.camera_x = 0
self.camera_y = 0
حرکت دوربین با ورودی های صفحه کلید
در مرحله بعد، روش on_key_press بازی را تغییر دهید تا حرکت دوربین را بر اساس ورودی های بازیکن در نظر بگیرد. وقتی پخش کننده به چپ یا راست حرکت می کند، می توانید موقعیت دوربین را متناسب با آن به روز کنید. همچنین، کد ترسیم را طوری تنظیم کنید که موقعیت دوربین را هنگام رندر کردن اشیاء بازی در نظر بگیرید.
class MyGame(arcade.Window):
def __init__(self, width, height):
super().__init__(width, height)
self.camera = Camera()
self.player_x = width // 2
self.player_y = height // 2
def on_key_press(self, key, modifiers):
if key == arcade.key.LEFT:
self.player_x -= MOVEMENT_SPEED
self.camera.camera_x -= MOVEMENT_SPEED
elif key == arcade.key.RIGHT:
self.player_x += MOVEMENT_SPEED
self.camera.camera_x += MOVEMENT_SPEED
def on_draw(self):
arcade.start_render()
arcade.set_viewport(
self.camera.camera_x,
self.camera.camera_x + SCREEN_WIDTH,
self.camera.camera_y,
self.camera.camera_y + SCREEN_HEIGHT
)
arcade.draw_circle_filled(self.player_x, self.player_y, 20, arcade.color.RED)
arcade.draw_rectangle_filled(400, 200, 80, 40, arcade.color.GREEN)
حرکت دوربین با ورودی های ماوس
علاوه بر ورودی های صفحه کلید، می توانید حرکت دوربین را بر اساس ورودی های ماوس نیز فعال کنید. به عنوان مثال، می توانید با کشیدن صفحه نمایش به پخش کننده اجازه دهید دوربین را حرکت دهد. برای رسیدن به این هدف، روش on_mouse_drag را تغییر دهید تا موقعیت دوربین بر اساس حرکت ماوس به روز شود.
class MyGame(arcade.Window):
def on_mouse_drag(self, x, y, dx, dy, buttons, modifiers):
if buttons == arcade.MOUSE_BUTTON_LEFT:
self.camera.camera_x -= dx
self.camera.camera_y -= dy
از جمله ویژگی های اضافی
افزودن دوربین به بازی خود دنیایی از امکانات را برای ویژگی ها و جلوه های اضافی باز می کند. در اینجا چند نمونه از چگونگی بهبود بیشتر بازی خود با استفاده از سیستم دوربین آورده شده است.
عملکرد زوم
برای پیاده سازی عملکرد بزرگنمایی، باید یک متغیر بزرگنمایی را در کلاس Camera معرفی کنید و روش on_mouse_scroll را برای به روز رسانی سطح زوم بر اساس حرکت چرخ ماوس تغییر دهید. همچنین باید پارامترهای set_viewport را برای در نظر گرفتن سطح بزرگنمایی تنظیم کنید.
class Camera:
def __init__(self):
self.camera_x = 0
self.camera_y = 0
self.zoom = 1.0
class MyGame(arcade.Window):
def on_mouse_scroll(self, x, y, scroll_x, scroll_y):
self.camera.zoom += scroll_y * 0.1
def on_draw(self):
arcade.start_render()
arcade.set_viewport(
self.camera.camera_x * self.camera.zoom,
(self.camera.camera_x + SCREEN_WIDTH) * self.camera.zoom,
self.camera.camera_y * self.camera.zoom,
(self.camera.camera_y + SCREEN_HEIGHT) * self.camera.zoom
)
arcade.draw_circle_filled(self.player_x, self.player_y, 20, arcade.color.RED)
arcade.draw_rectangle_filled(400, 200, 80, 40, arcade.color.GREEN)
حرکت روان دوربین
برای دستیابی به حرکت نرم تر دوربین، می توانید یک تکنیک درون یابی به نام درون یابی خطی (lerp) را معرفی کنید. روش به روز رسانی را تغییر دهید تا به تدریج دوربین را با استفاده از lerp به سمت موقعیت هدف حرکت دهید. این یک اثر انتقال صاف ایجاد می کند.
class Camera:
def __init__(self):
self.camera_x = 0
self.camera_y = 0
self.target_x = 0
self.target_y = 0
self.lerp_speed = 0.1
def update(self):
self.camera_x = arcade.lerp(self.camera_x, self.target_x, self.lerp_speed)
self.camera_y = arcade.lerp(self.camera_y, self.target_y, self.lerp_speed)
class MyGame(arcade.Window):
def update(self, delta_time):
self.camera.target_x = self.player_x - SCREEN_WIDTH // 2
self.camera.target_y = self.player_y - SCREEN_HEIGHT // 2
self.camera.update()
def on_draw(self):
arcade.start_render()
arcade.set_viewport(
self.camera.camera_x,
self.camera.camera_x + SCREEN_WIDTH,
self.camera.camera_y,
self.camera.camera_y + SCREEN_HEIGHT
)
arcade.draw_circle_filled(self.player_x, self.player_y, 20, arcade.color.RED)
arcade.draw_rectangle_filled(400, 200, 80, 40, arcade.color.GREEN)
محدودیت های دوربین
برای جلوگیری از حرکت دوربین از مرزهای خاص، می توانید محدودیت هایی را وارد کنید. به عنوان مثال، می توانید حداقل و حداکثر موقعیت دوربین را تعیین کنید و اطمینان حاصل کنید که دوربین در آن محدودیت ها باقی می ماند.
class Camera:
def __init__(self):
self.camera_x = 0
self.camera_y = 0
self.min_x = 0
self.max_x = 800
self.min_y = 0
self.max_y = 600
def update(self):
self.camera_x = max(self.min_x, min(self.camera_x, self.max_x))
self.camera_y = max(self.min_y, min(self.camera_y, self.max_y))
class MyGame(arcade.Window):
def update(self, delta_time):
self.camera.camera_x = self.player_x - SCREEN_WIDTH // 2
self.camera.camera_y = self.player_y - SCREEN_HEIGHT // 2
self.camera.update()
def on_draw(self):
arcade.start_render()
arcade.set_viewport(
self.camera.camera_x,
self.camera.camera_x + SCREEN_WIDTH,
self.camera.camera_y,
self.camera.camera_y + SCREEN_HEIGHT
)
arcade.draw_circle_filled(self.player_x, self.player_y, 20, arcade.color.RED)
arcade.draw_rectangle_filled(400, 200, 80, 40, arcade.color.GREEN)
اینها تنها چند نمونه از نحوه استفاده از سیستم دوربین برای گنجاندن ویژگی ها و جلوه های اضافی در بازی های Python Arcade هستند.
شما همچنین می توانید بسیاری از ویژگی های اضافی دیگر را به بازی های مبتنی بر پایتون خود اضافه کنید. به عنوان مثال، میتوانید زمانی که پخشکننده به سطح دیگری میرود، دوربین موقعیت خود را به خاطر بسپارید. این تضمین میکند که هنگام انتقال بین سطوح، نمای یکسان باقی میماند و تجربهای صاف و ثابت برای بازیکن فراهم میکند.
بهترین روش ها برای یک سیستم دوربین
هنگام پیاده سازی یک سیستم دوربین در بازی Python Arcade خود، رعایت بهترین شیوه ها برای اطمینان از عملکرد بهینه و تجربه یک بازیکن روان ضروری است. در اینجا چند دستورالعمل کلیدی وجود دارد که باید به خاطر داشته باشید:
- از حرکت بیش از حد دوربین اجتناب کنید: در حالی که دوربین می تواند عناصر پویا را به بازی شما اضافه کند، حفظ تعادل و جلوگیری از حرکت بیش از حد دوربین بسیار مهم است. تغییر مداوم موقعیت دوربین می تواند بازیکنان را منحرف کند و حرکت در دنیای بازی را برای آنها چالش برانگیز کند.
- تست در رزولوشنها و نسبتهای مختلف: برای اطمینان از اینکه در دستگاهها و پیکربندیهای مختلف به خوبی کار میکند، ضروری است که سیستم دوربین خود را بر روی وضوحهای صفحه و نسبتهای مختلف تست کنید. این به شما کمک میکند تا مشکلات مربوط به مقیاسبندی درگاه دید، موقعیتیابی شی یا تنظیمات نسبت ابعاد را شناسایی کنید.
- بهینه سازی رندر: سیستم دوربین به طور بالقوه می تواند بر عملکرد بازی تأثیر بگذارد، به خصوص هنگام رندر کردن جهان های بزرگ بازی یا اشیاء متعدد. برای بهینه سازی رندر، تعیین کنید کدام اشیا خارج از دید دوربین هستند و آنها را از رندر حذف کنید.
- موارد لبه دسته: به موارد لبه توجه کنید که دوربین ممکن است با سناریوهای خاصی مانند مرزها، تشخیص برخورد یا اجسام همپوشانی مواجه شود. اطمینان حاصل کنید که سیستم دوربین این موارد را با ظرافت انجام می دهد و انتقال های صاف یا نشانه های بصری مناسب را برای نشان دادن محدودیت ها یا تعاملات با محیط بازی ارائه می دهد.
با پیروی از این بهترین شیوه ها، می توانید یک سیستم دوربین قوی و کاربرپسند ایجاد کنید که به طور یکپارچه در بازی های Python Arcade شما ادغام می شود.
با استفاده از دوربین بازی ها را سرگرم کننده تر کنید
با افزودن یک دوربین به بازیهای پایتون آرکید، میتوانید غوطهور شدن و تعامل بازیکنان را تا حد زیادی افزایش دهید. سیستم دوربین چه ایجاد دنیای بازی گسترده، چه تمرکز بر نواحی حیاتی یا ردیابی اجسام متحرک، ابزاری قدرتمند برای توسعه دهندگان بازی فراهم می کند.
با استفاده از حرکات دوربین، زوم کردن و جلوههای اضافی، میتوانید تجربههای مسحورکنندهای ایجاد کنید که بازیکنان را مجذوب خود کرده و آنها را برای کسب اطلاعات بیشتر بازگرداند.