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

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

یک دوربین اسکرول را به بازی های PyGame خود اضافه کنید

بیاموزید که چگونه دوربینی را مدل‌سازی کنید که بتواند در دنیای بازی شما حرکت کند تا واقع‌گرایی و عملکرد را اضافه کند.

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

راه‌های مختلفی برای پیاده‌سازی دوربین اسکرول در PyGame وجود دارد، بنابراین مطمئن شوید که تفاوت‌های آن‌ها را درک کرده‌اید.

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

قبل از شروع، pip را روی دستگاه خود نصب کنید و از دستور زیر برای نصب ماژول PyGame استفاده کنید:

pip install pygame

اکنون می توانید یک بازی ساده با یک مستطیل بازیکن و دو پلتفرم ثابت بسازید. بازیکن می تواند با استفاده از کلیدهای جهت دار به چپ و راست حرکت کند.

می توانید کد کامل پروژه را در این مخزن GitHub پیدا کنید.

با وارد کردن ماژول pygame شروع کنید. سپس، آن را مقداردهی اولیه کنید و با استفاده از تابع pygame.display.set_mode() پنجره بازی را ایجاد کنید. سپس، عنوان پنجره را تنظیم کنید و شی ساعت را برای مدیریت نرخ فریم ایجاد کنید.

import pygame

pygame.init()

WINDOW_WIDTH = 800
WINDOW_HEIGHT = 600

screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))

pygame.display.set_caption("My Simple Game")

clock = pygame.time.Clock()

BACKGROUND_COLOR = (255, 255, 255)

سپس پلتفرم پخش کننده و استاتیک را تنظیم کنید. اندازه پخش کننده و موقعیت اولیه آن را مشخص کنید.

PLAYER_WIDTH = 50
PLAYER_HEIGHT = 50

player_x = WINDOW_WIDTH // 2 - PLAYER_WIDTH // 2
player_y = WINDOW_HEIGHT - PLAYER_HEIGHT - 20

PLAYER_SPEED = 10

RECTANGLE_COLOR_1 = (255, 0, 0)
RECTANGLE_COLOR_2 = (0, 0, 255)

rectangle_1 = pygame.Rect(200, 200, 100, 100)
rectangle_2 = pygame.Rect(500, 300, 150, 50)

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

while True:
    # Handle events
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            quit()

    # Draw the background
    screen.fill(BACKGROUND_COLOR)

    # Draw the static rectangles
    pygame.draw.rect(screen, RECTANGLE_COLOR_1, rectangle_1)
    pygame.draw.rect(screen, RECTANGLE_COLOR_2, rectangle_2)

    # Draw the player
    player_rect = pygame.Rect(player_x, player_y, PLAYER_WIDTH,
        PLAYER_HEIGHT)

    pygame.draw.rect(screen, (0, 0, 0), player_rect)

    # Update the display
    pygame.display.update()

    # Limit the frame rate
    clock.tick(30)

راه اندازی دوربین

حالا که یک بازی ساده با یک مستطیل بازیکن و دو پلتفرم ثابت دارید، می توانید کار روی دوربین را شروع کنید. در PyGame، دوربین اساساً فقط یک افست است که بر روی تمام اشیایی که به روی صفحه می‌کشید عمل می‌کند. این بدان معناست که اگر دوربین را به سمت چپ حرکت دهید، همه چیز روی صفحه به نظر می رسد که به سمت راست حرکت می کنند.

مطلب مرتبط:   نحوه نصب کد ویژوال استودیو در اوبونتو

برای راه اندازی دوربین، ابتدا باید متغیری را برای نگه داشتن افست X دوربین تعریف کنید. این متغیر camera_offset_x را صدا بزنید و مقدار دهی اولیه کنید.

# Set the camera offset
camera_offset_x = 0

در مرحله بعد، موقعیت تمام اشیایی را که روی صفحه می کشید، به روز کنید تا افست دوربین در نظر گرفته شود. می توانید این کار را با افزودن مقدار camera_offset_x به موقعیت X هر شی انجام دهید. به عنوان مثال، می توانید موقعیت بازیکن را به صورت زیر به روز کنید:

# Draw the player
player_rect = pygame.Rect(player_x + camera_offset_x, player_y, PLAYER_WIDTH,
    PLAYER_HEIGHT)

pygame.draw.rect(screen, (0, 0, 0), player_rect)

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

# Draw the static rectangles
rectangle_1_draw_pos = rectangle_1.move(camera_offset_x, 0)
pygame.draw.rect(screen, RECTANGLE_COLOR_1, rectangle_1_draw_pos)
    
rectangle_2_draw_pos = rectangle_2.move(camera_offset_x, 0)
pygame.draw.rect(screen, RECTANGLE_COLOR_2, rectangle_2_draw_pos)

حرکت دوربین با ورودی های صفحه کلید

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

برای انجام این کار، کد زیر را در حلقه رویداد که ورودی های صفحه کلید را کنترل می کند، اضافه کنید:

if event.type == pygame.KEYDOWN:
    if event.key == pygame.K_LEFT:
        camera_offset_x -= PLAYER_SPEED
    elif event.key == pygame.K_RIGHT:
        camera_offset_x += PLAYER_SPEED

راه دیگر این است که مختصات x پخش کننده را با فشار صفحه کلید تغییر دهید و سپس افست دوربین را به روز کنید. شما می توانید این را به این صورت پیاده سازی کنید:

# Handle events
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        pygame.quit()
        quit()

    if event.type == pygame.KEYDOWN:
         if event.key == pygame.K_LEFT:
             player_x -= PLAYER_SPEED
         elif event.key == pygame.K_RIGHT:
             player_x += PLAYER_SPEED

سپس، می توانید افست دوربین را با توجه به مختصات x پخش کننده به صورت زیر به روز کنید:

camera_offset_x = WINDOW_WIDTH // 2 - player_x - PLAYER_WIDTH // 2

حرکت دوربین با ورودی های ماوس

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

مطلب مرتبط:   چگونه در 6 مرحله آسان مهندس نرم افزار شوید

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

# Handle events
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        pygame.quit()
        quit()

    if event.type == pygame.MOUSEBUTTONDOWN:
        if event.button == 1:
            mouse_start_pos = pygame.mouse.get_pos()

    if event.type == pygame.MOUSEMOTION:
        if pygame.mouse.get_pressed()[0]:
            mouse_current_pos = pygame.mouse.get_pos()
            mouse_offset_x = mouse_current_pos[0] - mouse_start_pos[0]
            player_x -= mouse_offset_x
            mouse_start_pos = mouse_current_pos

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

علاوه بر افکت دوربین اسکرول، می‌توانید چندین ویژگی دیگر مرتبط با دوربین را برای بهبود تجربه بازی اضافه کنید. یکی از این ویژگی‌ها، افکت دوربین بزرگ‌نمایی است که به بازیکن اجازه می‌دهد تا در دنیای بازی بزرگ‌نمایی یا خارج کند. شما می توانید با تغییر اندازه پنجره بازی و مقیاس بندی اشیاء ترسیم شده روی صفحه به این افکت دست یابید.

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

zoom = 1.0

def get_scaled_size(size):
    return int(size * zoom)

در مرحله بعد، موقعیت و اندازه اشیاء ترسیم شده روی صفحه را با استفاده از تابع get_scaled_size به روز کنید. به عنوان مثال، می توانید موقعیت و اندازه پخش کننده را به صورت زیر به روز کنید:

player_rect = pygame.Rect(
    get_scaled_size(player_x + camera_offset_x),
    get_scaled_size(player_y),
    get_scaled_size(PLAYER_WIDTH),
    get_scaled_size(PLAYER_HEIGHT)
)

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

rectangle_1_draw_pos = pygame.Rect(
    get_scaled_size(rectangle_1.x + camera_offset_x),
    get_scaled_size(rectangle_1.y),
    get_scaled_size(rectangle_1.width),
    get_scaled_size(rectangle_1.height)
)

pygame.draw.rect(screen, RECTANGLE_COLOR_1, rectangle_1_draw_pos)

rectangle_2_draw_pos = pygame.Rect(
    get_scaled_size(rectangle_2.x + camera_offset_x),
    get_scaled_size(rectangle_2.y),
    get_scaled_size(rectangle_2.width),
    get_scaled_size(rectangle_2.height)
)

pygame.draw.rect(screen, RECTANGLE_COLOR_2, rectangle_2_draw_pos)

با فشار دادن کلید = یا – به ترتیب، سطح زوم را 0.1 افزایش یا کاهش دهید. اندازه جدید پنجره بازی را بر اساس سطح زوم فعلی تنظیم کنید. برای انجام این کار، کد زیر را در حلقه رویداد که ورودی های صفحه کلید را کنترل می کند، اضافه کنید:

if event.type == pygame.KEYDOWN:
    if event.key == pygame.K_EQUALS:
        zoom += 0.1

        screen = pygame.display.set_mode((
            int(WINDOW_WIDTH * zoom),
            int(WINDOW_HEIGHT * zoom)
        ))
    elif event.key == pygame.K_MINUS:
        zoom -= 0.1

        if zoom < 0.1:
            zoom = 0.1

        screen = pygame.display.set_mode((
            int(WINDOW_WIDTH * zoom),
            int(WINDOW_HEIGHT * zoom)
        ))

با کد بالا، شما با موفقیت افکت دوربین زوم را به بازی PyGame ما اضافه کردید. با ترکیب این ویژگی با افکت دوربین اسکرول، می توانید یک تجربه بازی پویا و جذاب ایجاد کنید.

مطلب مرتبط:   نحوه خواندن فایل‌های CSV با Node.js

بهبود گیم پلی با حرکات دوربین

افزودن دوربین اسکرول به بازی PyGame نه تنها تجربه بصری را افزایش می دهد، بلکه گیم پلی را نیز بهبود می بخشد. این به بازیکن اجازه می دهد تا بیشتر دنیای بازی را ببیند و درک بهتری از محیط اطراف خود را برای آنها فراهم می کند و حرکت را آسان تر می کند.

همچنین می‌توانید از حرکت دوربین برای ایجاد جلوه‌های ویژه مانند بزرگ‌نمایی و کوچک‌نمایی یا تکان دادن صفحه برای شبیه‌سازی انفجار یا زلزله استفاده کنید.