我是pygame的新手,正在制作游戏。我有一个角色,我想让腿移动。它有2张图片以及如何让它们切换? 这个角色是蓝色巫师。有人可以帮忙吗?谢谢大家
import pygame
import time
time_start = time.time()
seconds = 0
pygame.init()
time = pygame.time.get_ticks()
timeStep = 1000
display_width = 1500
display_height = 750
originx = 0
originy = 0
gameDisplay = pygame.display.set_mode((display_width,display_height))
pygame.display.set_caption('Game')
black = (0,0,0)
white = (255,255,255)
dollarBill = pygame.image.load('DollarBill.png')
clock = pygame.time.Clock()
killed = False
manImg = pygame.image.load('Wizard1Front.png')
manImgt = pygame.image.load('Wizard1Front.png')
wfo = True
def dollarbill(dx,dy):
gameDisplay.blit(dollarBill, (dx,dy))
def blueWizard(x,y):
if wfo == True:
gameDisplay.blit(manImg, (x,y))
else:
gameDisplay.blit(manImgt, (x,y))
x = (display_width * 0.45)
y = (display_height * 0.8)
dx = (display_width * 0.45)
dy = (display_height * 0.8)
#key response
key_left = False
key_right = False
key_up = False
key_down = False
right_ctrl = False
ctrl_left = False
ctrl_right = False
ctrl_up = False
ctrl_down = False
while not killed:
for event in pygame.event.get():
if event.type == pygame.QUIT:
crashed = True
pygame.quit()
quit()
############################
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
key_left = True
ctrl_left = True
elif event.key == pygame.K_RIGHT:
key_right = True
ctrl_right = True
elif event.key == pygame.K_UP:
key_up = True
ctrl_up = True
elif event.key == pygame.K_DOWN:
key_down = True
ctrl_down = True
elif event.key == pygame.K_RCTRL:
right_ctrl = True
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
key_left = False
ctrl_left = False
if event.key == pygame.K_RIGHT:
key_right = False
ctrl_right = False
if event.key == pygame.K_UP:
key_up = False
ctrl_up = False
if event.key == pygame.K_DOWN:
key_down = False
ctrl_down = False
######################
##what the keys do
if key_right == True and x < (display_width - 74):
x += 2.5
if key_left == True and x > 0:
x += -2.5
if key_up == True and y > 0:
y += -2.5
if key_down == True and y < (display_height - 113):
y += 2.5
if right_ctrl == True:
dx += 20
if ctrl_left == True:
dx += -2.5
if ctrl_right == True:
dx += 2.5
if ctrl_up == True:
dy += -2.5
if ctrl_down == True:
dy += 2.5
##extra logic
if dx > (display_width) or dy > (display_height):
dx = x
dy = y
right_ctrl = False
if dx < (originx) or dy < (originy):
dx = x
dy = y
right_ctrl = False
gameDisplay.fill(black)
blueWizard(x,y)
dollarbill(dx,dy)
pygame.display.update()
clock.tick(60)
pygame.quit()
quit()
答案 0 :(得分:1)
虽然这个例子可能适用于一个简单的两个图像移动精灵,但你真正想做的是使用精灵表。
精灵表是典型的游戏运动方式(原版NES,Sega等)。
基本的想法是你有一个关于精灵所有可能图像的大图像。然后,您使用代码将该大图像的特定块分配给新图像。然后将这些图像放在一个数组中。当您的播放器移动时,您会增加数组索引,然后在到达结束时重置为0.
您如何选择要显示的图像(索引)可以通过放置在地图上(x或y位置),当前速度或某些其他属性来定义。
您甚至可以根据播放器状态更改您使用的图像阵列。意思是,你可以有一个用于行走的图像阵列,另一个用于跑步的图像,以及用于跳跃的花药。您可以根据标志或状态对象确定哪个数组。
通常,对于良好的步行运动,您需要阵列中至少6张图像。
有关PyGame中精灵表的更多信息,请查看他们的wiki:https://pygame.org/wiki/Spritesheet
有关精灵表的示例,请查看Spriters资源:http://www.spriters-resource.com/
答案 1 :(得分:0)
wfo = False
def blueWizard(x,y):
if wfo == True:
gameDisplay.blit(manImg, (x,y))
else:
gameDisplay.blit(manImgt, (x,y))
如果这是你对角色的展示,那么你可以这样做:
wfo = False
def set_wfo():
global wfo #you can now use wfo if any other functions
set_wfo()
def blueWizard(x,y):
if wfo == True:
gameDisplay.blit(manImg, (x,y))
wfo = False
else:
gameDisplay.blit(manImgt, (x,y))
wfo = True
我不在电脑上,所以我无法检查它,但我希望它有效:),也许不行。
现在,当我查看它时,你可能不应该使用这个功能,而只是用你的代码替换你调用它的地方,没有真正使用这个功能它只会使事情变得复杂......
同时放入if a == True:
,您可以使用if a:
而不是
key_left = False
key_right = False
key_up = False
key_down = False
right_ctrl = False
ctrl_left = False
ctrl_right = False
ctrl_up = False
ctrl_down = False
你可以拥有
key_left, key_right, key_up, key_down, right_ctrl, ctrl_left, ctrl_right, ctrl_up, ctrl_down = [False]*9
但是我会把键所做的事情转移到你正在浏览thrue事件的检查系统中,它会更短,没有别的东西会真正改变......
同样看pygame.sprite.Group,它们非常有用。我没有提到的任何事情?