خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

با کتابخانه آرکید اشیاء بازی را متحرک کنید

کتابخانه Python Arcade شما را از ساده‌ترین انیمیشن‌های مبتنی بر رنگ گرفته تا مدل‌سازی ذرات پیچیده پوشش می‌دهد.

انیمیشن نقشی حیاتی در افزایش جذابیت بصری و جذابیت بازی‌های ویدیویی دارد. کتابخانه Arcade یک چارچوب پایتون برای ایجاد بازی های دو بعدی است. این یک راه ساده و موثر برای گنجاندن انیمیشن ها در پروژه های بازی شما ارائه می دهد.

شما می توانید از کتابخانه Arcade برای ایجاد انیمیشن های حرکتی اولیه و انیمیشن های هماهنگ با رویدادهای بازی استفاده کنید.

یک بازی ساده بسازید

قبل از شروع، مطمئن شوید که پیپ را روی دستگاه خود نصب کرده اید. برای نصب کتابخانه آرکید از این دستور استفاده کنید:

pip install arcade

پس از آن، یک فایل پایتون به نام simple-game.py ایجاد کنید و با راه‌اندازی یک بازی شروع کنید که بازیکن بتواند به چپ و راست حرکت کند.

کد استفاده شده در این مقاله در این مخزن GitHub موجود است و برای استفاده شما تحت مجوز MIT رایگان است.

با استفاده از کتابخانه Arcade، می توانید یک پنجره ایجاد کنید، محیط بازی را تنظیم کنید و ورودی بازیکن را مدیریت کنید. در اینجا یک قطعه کد برای شروع آمده است:

import arcade

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

class MyGame(arcade.Window):
    def __init__(self):
        super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "My Game")
        self.player_x = SCREEN_WIDTH // 2
        self.player_y = SCREEN_HEIGHT // 2

    def on_draw(self):
        arcade.start_render()
       col = arcade.color.BLUE
       arcade.draw_circle_filled(self.player_x, self.player_y, 20, col)

    def on_key_press(self, key, modifiers):
        if key == arcade.key.LEFT:
            self.player_x -= 10
        elif key == arcade.key.RIGHT:
            self.player_x += 10

def main():
    game = MyGame()
    arcade.run()

if __name__ == "__main__":
    main()

انیمیشن حرکت پایه را اضافه کنید

اکنون، بازی خود را یک قدم جلوتر ببرید و انیمیشن حرکتی اولیه را به شی بازیکن اضافه کنید. برای متحرک سازی بازیکن در حین حرکت، 3 دایره مختلف ایجاد کنید و زمانی که بازیکن شروع به حرکت کرد، بین آنها به صورت متوالی تکرار کنید. در اینجا قطعه کد به روز شده برای فایل move-animation.py آمده است:

class MyGame(arcade.Window):
    def __init__(self):
        super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "My Game")
        self.player_x = SCREEN_WIDTH // 2
        self.player_y = SCREEN_HEIGHT // 2
        self.frame_counter = 0

    def on_draw(self):
        arcade.start_render()
        col1 = arcade.color.BLUE
        col2 = arcade.color.GREEN
        col3 = arcade.color.RED

        if self.frame_counter < 10:
            arcade.draw_circle_filled(self.player_x, self.player_y, 20,col1 )
        elif self.frame_counter < 20:
            arcade.draw_circle_filled(self.player_x, self.player_y, 20,col2 )
        else:
            arcade.draw_circle_filled(self.player_x, self.player_y, 20, col3)

    def on_key_press(self, key, modifiers):
        if key == arcade.key.LEFT:
            self.player_x -= 10
            self.frame_counter = (self.frame_counter + 1) % 30
        elif key == arcade.key.RIGHT:
            self.player_x += 10
            self.frame_counter = (self.frame_counter + 1) % 30

در اینجا یک نمونه فریم خروجی آورده شده است:

مطلب مرتبط:   Strapi v4.11 چه چیز جدیدی دارد؟

شی بازیکن متحرک رنگ در حال تغییر است

کنترل سرعت و جهت انیمیشن

برای کنترل سرعت انیمیشن می توانید سیستم نرخ فریم را معرفی کنید. همچنین می توانید ترتیب فریم ها را بسته به جهت حرکت بازیکن تغییر دهید. هنگامی که بازیکن از چپ به راست حرکت می کند، فریم ها به ترتیب معکوس نمایش داده می شوند.

در اینجا قطعه کد اصلاح شده برای فایل frame-rate.py آمده است:

class MyGame(arcade.Window):
    def __init__(self):
        super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "My Game")
        self.player_x = SCREEN_WIDTH // 2
        self.player_y = SCREEN_HEIGHT // 2
        self.frame_counter = 0
        col1 = arcade.color.BLUE
        col2 = arcade.color.GREEN
        col3 = arcade.color.RED
        self.frames = [col1, col2, col3]
        self.frame_rate = 10

    def on_draw(self):
        arcade.start_render()
        frame_index = self.frame_counter // self.frame_rate % len(self.frames)

        if self.player_x < SCREEN_WIDTH // 2:
            frame_index = len(self.frames) - 1 - frame_index

        index = self.frames[frame_index]
        arcade.draw_circle_filled(self.player_x, self.player_y, 20, index)

    def on_key_press(self, key, modifiers):
        if key == arcade.key.LEFT:
            self.player_x -= 10
            self.frame_counter += 1
        elif key == arcade.key.RIGHT:
            self.player_x += 10
            self.frame_counter += 1

از عملگر مدول % با len(self.frames) استفاده کنید تا مطمئن شوید که frame_index همیشه در محدوده فریم های موجود باقی می ماند. این کار از بروز IndexError در زمانی که انیمیشن در فریم ها حلقه می زند جلوگیری می کند.

مقدار فریم_رایت را برای کنترل سرعت انیمیشن تنظیم کنید و از حرکت متحرک اشیاء بازی خود لذت ببرید.

از جمله ویژگی های اضافی

کتابخانه Arcade ویژگی های مختلفی را برای بهبود انیمیشن های شما فراهم می کند.

اثرات ذرات

شما می توانید افکت های ذرات مانند انفجار یا دود ایجاد کنید تا واقع گرایی را به بازی خود بیافزایید. یک فایل به نام particle.py ایجاد کنید و کد زیر را برای پیاده سازی سیستم ذره ساده با استفاده از پایتون و کتابخانه آرکید اضافه کنید:

import arcade
import random

# Screen dimensions
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

# Colors
WHITE = (255, 255, 255)

# Particle class
class Particle:
    def __init__(self, x, y, dx, dy, radius, color, lifespan):
        self.x = x
        self.y = y
        self.dx = dx
        self.dy = dy
        self.radius = radius
        self.color = color
        self.lifespan = lifespan

    def update(self):
        self.x += self.dx
        self.y += self.dy
        self.lifespan -= 1

    def draw(self):
        arcade.draw_circle_filled(self.x, self.y, self.radius, self.color)

# Game class
class MyGame(arcade.Window):
    def __init__(self, width, height):
        super().__init__(width, height, "Particle Example")
        self.particles = []

    def setup(self):
        # Create particles
        for _ in range(100):
            x = random.randrange(SCREEN_WIDTH)
            y = random.randrange(SCREEN_HEIGHT)
            dx = random.uniform(-1, 1)
            dy = random.uniform(-1, 1)
            radius = random.uniform(2, 5)
            color = arcade.color.WHITE
            lifespan = random.randint(60, 120)
            particle = Particle(x, y, dx, dy, radius, color, lifespan)
            self.particles.append(particle)

    def on_draw(self):
        arcade.start_render()
        for particle in self.particles:
            particle.draw()

    def update(self, delta_time):
        for particle in self.particles:
            particle.update()

            if particle.lifespan <= 0:
                self.particles.remove(particle)

def main():
    game = MyGame(SCREEN_WIDTH, SCREEN_HEIGHT)
    game.setup()
    arcade.run()

if __name__ == "__main__":
    main()

شما باید انیمیشنی را ببینید که شامل بسیاری از ذرات متحرک است:

مطلب مرتبط:   WinForms: چگونه چندین تم را به برنامه خود اضافه کنید

ذرات توزیع شده در پنجره بازی

انیمیشن های تعاملی

انیمیشن های تعاملی را پیاده سازی کنید که به ورودی های کاربر یا رویدادهای بازی پاسخ می دهند. به عنوان مثال، هنگامی که بازیکن با یک شی تعامل برقرار می کند، می تواند متحرک شود، رنگ را تغییر دهد یا به نوعی تغییر شکل دهد. این انیمیشن های تعاملی بازخورد ارائه می کنند و تعامل بازیکن را با بازی افزایش می دهند. کد فایل interactive-animation.py در اینجا آمده است:

import arcade

# Screen dimensions
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

# Colors
WHITE = (255, 255, 255)
RED = (255, 0, 0)

class MyGame(arcade.Window):
    def __init__(self, width, height):
        super().__init__(width, height, "Interactive Animation")
        self.player_x = 400
        self.player_y = 300
        self.player_radius = 30
        self.player_color = RED
        self.animation_radius = 60
        self.animation_color = WHITE
        self.animation_active = False

    def on_draw(self):
        arcade.start_render()

        arcade.draw_circle_filled(self.player_x,
                                  self.player_y,
                                  self.player_radius,
                                  self.player_color)

        if self.animation_active:
            arcade.draw_circle_filled(self.player_x,
                                       self.player_y,
                                       self.animation_radius,
                                       self.animation_color)

    def on_mouse_press(self, x, y, button, modifiers):
        if (self.player_x - self.player_radius <=
            x <= self.player_x + self.player_radius and
                self.player_y - self.player_radius <=
            y <= self.player_y + self.player_radius
       ):
            self.animation_active = True

    def update(self, delta_time):
        if self.animation_active:
            self.animation_radius += 1

            if self.animation_radius > 100:
                self.animation_active = False
                self.animation_radius = 0

def main():
    game = MyGame(SCREEN_WIDTH, SCREEN_HEIGHT)
    arcade.run()

if __name__ == "__main__":
    main()

روش‌های لازم، مانند on_draw، on_mouse_press، و به‌روزرسانی را برای انجام طراحی پخش‌کننده و انیمیشن، مدیریت کلیک‌های ماوس و به‌روزرسانی انیمیشن لغو کنید.

برای ترسیم بازیکن، از تابع arcade.draw_circle_filled استفاده کنید که مختصات (x، y) مرکز، شعاع و رنگ را به عنوان آرگومان می گیرد. تابع draw_circle_filled یکی از ابزارهای Arcade است که می توانید از آن برای ترسیم دارایی های بازی استفاده کنید. در این مورد، می توانید با تغییر شعاع در طول زمان، یک دایره در حال رشد رسم کنید.

روش on_mouse_press زمانی اجرا می شود که کاربر روی ماوس کلیک می کند. بررسی می‌کند که آیا مختصات ماوس در محدوده شی پخش‌کننده قرار دارند یا خیر و در صورت وجود، انیمیشن را فعال می‌کند.

بهترین روش ها برای افزودن انیمیشن

هنگام افزودن انیمیشن به بازی های خود، بهترین روش های زیر را در نظر بگیرید:

تعداد انیمیشن ها را محدود کنید

داشتن انیمیشن های زیاد با فریم های زیاد می تواند بر عملکرد تاثیر بگذارد. تعداد انیمیشن ها یا فریم های مورد نیاز را به حداقل برسانید، به خصوص برای عناصر غیر بحرانی در بازی. ساده‌سازی انیمیشن‌ها می‌تواند به حفظ نرخ فریم ثابت و بهینه‌سازی استفاده از منابع کمک کند.

مطلب مرتبط:   چگونه یک اپلیکیشن شمارنده ساده در React بسازیم

دسته ای رندر اشیاء مشابه

اشیاء مشابهی که فریم‌ها و بافت‌های انیمیشن مشابهی دارند را با هم گروه‌بندی کنید و آنها را به‌صورت دسته‌ای رندر کنید. دسته‌بندی تعداد تماس‌های قرعه‌کشی را کاهش می‌دهد و در نتیجه عملکرد بهبود می‌یابد. این تکنیک مخصوصاً برای متحرک سازی اشیایی که از یک صفحه اسپرایت استفاده می کنند یا دنباله های انیمیشن مشابهی دارند مفید است.

از Interpolation برای انیمیشن صاف استفاده کنید

از تکنیک های درون یابی مانند درون یابی خطی (Lerping) برای دستیابی به انتقال صاف انیمیشن استفاده کنید. درون یابی مقادیر میانی بین فریم های کلیدی انیمیشن را برای ایجاد حرکات سیال محاسبه می کند. این رویکرد از پرش های ناگهانی یا حرکات تند بین فریم ها جلوگیری می کند و در نتیجه انیمیشن های بصری جذاب تری ایجاد می کند.

سرعت و زمان انیمیشن را در نظر بگیرید

برای یافتن تعادل مناسب برای بازی خود، سرعت و زمان بندی انیمیشن های مختلف را آزمایش کنید. مدت زمان فریم را تنظیم کنید یا از دنباله های مختلف انیمیشن برای ایجاد تغییرات در سرعت، شتاب یا کاهش سرعت استفاده کنید. این تنظیمات می تواند عمق و شخصیت را به انیمیشن های بازی شما اضافه کند.

تست و بهینه سازی کنید

به طور منظم انیمیشن های خود را بر روی دستگاه های مختلف تست کنید و عملکرد را نظارت کنید. به دنبال تنگناها یا کاهش سرعت بالقوه باشید و بر این اساس بهینه سازی کنید. این فرآیند به اطمینان از تجربه‌های متحرک یکنواخت و یکنواخت در طیف گسترده‌ای از دستگاه‌ها کمک می‌کند.

بازی ها را با انیمیشن جذاب تر کنید

افزودن انیمیشن به بازی های شما می تواند به میزان قابل توجهی درگیری و غوطه وری بازیکن را افزایش دهد. انیمیشن ها بازخورد بصری را به اقدامات بازیکن ارائه می دهند و باعث می شود گیم پلی بصری تر و لذت بخش تر شود. آنها دنیای بازی را زنده می کنند و حس واقع گرایی و هیجان را ایجاد می کنند.

خواه یک کاراکتر در حال اجرا باشد، یک شیء در حال انفجار یا یک افکت انتقال ساده، انیمیشن ها به تجربه بازی پویاتر و جذاب تر کمک می کنند.