【问题标题】:Flip sprite when changing the direction of movement改变运动方向时翻转精灵
【发布时间】:2022-07-26 00:29:12
【问题描述】:

今天我开始学习 pygame 和 python,最终重新制作了简单的游戏“Graphwar”。 作为我的第一个项目,我选择制作一个非常简单的 2d 汽车游戏,同时关注 tutorial,现在我想自己尝试一些东西。那就是让我的汽车在按下 A 或 D 时使用 pygame.transform.flip() 来视觉上改变方向。

我在不同的网站上阅读了多个不同的教程,但我什么也做不了。

这是我的代码:

#Imports
from turtle import pos
from xml.dom.pulldom import CHARACTERS
import pygame
import os

pygame.init()

#Colors
WHITE = (255,255,255)
BLACK = (0,0,0)
GREEN = (54, 236, 189)
GRAY = (64, 64, 64)

#Images
ICON = pygame.image.load(os.path.join("Assets", "icon.png"))
COOL = pygame.image.load(os.path.join("Assets", "cool.jpg"))
CAR1_IMG = pygame.image.load(os.path.join("Assets", "car1_sprite.png"))
CAR2_IMG = pygame.image.load(os.path.join("Assets", "car2_sprite.png"))

#Characters
CHARACTER_WIDTH = 252
CHARACTER_HEIGHT = 86
CAR1 = pygame.transform.scale(CAR1_IMG, (CHARACTER_WIDTH, CHARACTER_HEIGHT))
CAR2 = pygame.transform.scale(CAR2_IMG, (CHARACTER_WIDTH, CHARACTER_HEIGHT))

#Window
WIDTH, HEIGHT = 1280, 720
WIN=pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("USSPCS: Ultimate Super Supercar Policecar Chase Simulator Game of The Year Deluxe Edition")
pygame.display.set_icon(ICON)

FPS = 60
VEL = 3

#Render
def draw_window(CAR1_RECT, CAR2_RECT):
    WIN.fill(GRAY)
    WIN.blit(CAR1, (CAR1_RECT.x, CAR1_RECT.y)) #Draw CAR1
    WIN.blit(CAR2, (CAR2_RECT.x, CAR2_RECT.y)) #Draw CAR2
    pygame.display.update()

#Game
def main():
    CAR1_RECT = pygame.Rect(300, 100, CHARACTER_WIDTH, CHARACTER_HEIGHT) #CAR1 Hitbox
    CAR2_RECT = pygame.Rect(300, 300, CHARACTER_WIDTH, CHARACTER_HEIGHT) #CAR2 Hitbox
    
    clock = pygame.time.Clock()
    running = True
    while running:
        clock.tick(FPS)
        for event in pygame.event.get(): #Shutdown when clicking the X
            if event.type == pygame.QUIT:
                running = False
                
        if event.type == pygame.KEYDOWN: #Shutdown with ESC
            if event.key == pygame.K_ESCAPE:
             running = False
                
        key_pressed = pygame.key.get_pressed()
        if key_pressed[pygame.K_a]: #CAR1 Go left
            CAR1_RECT.x -= VEL
        key_pressed = pygame.key.get_pressed()
        if key_pressed[pygame.K_d]: #CAR1 Go right
            CAR1_RECT.x += VEL
        key_pressed = pygame.key.get_pressed()
        if key_pressed[pygame.K_w]: #CAR1 Go up
            CAR1_RECT.y -= VEL
        key_pressed = pygame.key.get_pressed()
        if key_pressed[pygame.K_s]: #CAR1 Go down
            CAR1_RECT.y += VEL
            
        key_pressed = pygame.key.get_pressed()
        if key_pressed[pygame.K_LEFT]: #CAR2 Go left
            CAR2_RECT.x -= VEL
        key_pressed = pygame.key.get_pressed()
        if key_pressed[pygame.K_RIGHT]: #CAR2 Go right
            CAR2_RECT.x += VEL
        key_pressed = pygame.key.get_pressed()
        if key_pressed[pygame.K_UP]: #CAR2 Go up
            CAR2_RECT.y -= VEL
        key_pressed = pygame.key.get_pressed()
        if key_pressed[pygame.K_DOWN]: #CAR2 Go down
            CAR2_RECT.y += VEL
        draw_window(CAR1_RECT, CAR2_RECT)
                
    pygame.quit()
    
if __name__ == "__main__":
    main()

【问题讨论】:

    标签: python python-3.x pygame


    【解决方案1】:

    为每个护理创建 2 个图像(例如:CAR_LEFTCAR_RGIHT)并将第一个方向的图像分配给变量 `CAR1:

    CAR1_RIGHT = pygame.transform.scale(CAR1_IMG, (CHARACTER_WIDTH, CHARACTER_HEIGHT))
    CAR1_LEFT = pygame.transform.flip(CAR1_RIGHT, True, False)
    CAR1 = CAR1_RIGHT 
    

    按下按钮时更改图像(注意在应用程序循环中调用一次pygame.key.get_pressed()就足够了):

    key_pressed = pygame.key.get_pressed()
    if key_pressed[pygame.K_a]: #CAR1 Go left
        CAR1_RECT.x -= VEL
        CAR1 = CAR1_LEFT
    if key_pressed[pygame.K_d]: #CAR1 Go right
        CAR1_RECT.x += VEL
        CAR1 = CAR1_RIGHT 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-29
      • 1970-01-01
      • 2015-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多