gpt4 book ai didi

python - 如何创建一个 "Solid" block ?小游戏

转载 作者:行者123 更新时间:2023-12-04 07:55:00 26 4
gpt4 key购买 nike

我想在我正在开发的简单平台游戏中实现实体块,但我不知道如何实现。
我尝试了很多东西,但没有任何效果。
我想做以下事情:
当我跳上去时,我会留在那里
当我跳到它下面时,我不会到达顶部
当我从左侧跳时,我不会到达右侧
当我从右侧跳时,我不会到达左侧
我真的很感激你的帮助,谢谢。
我的代码:

from pygame.locals import *
SCREEN_WIDTH = 1923
SCREEN_HEIGHT = 1000


class Player(pygame.sprite.Sprite):
def __init__(self, x, y):
super(Player, self).__init__()
self.surf = pygame.image.load('C:\Sprites\mrkva.png').convert()
self.surf.set_colorkey((0, 0, 0), RLEACCEL)
self.rect = self.surf.get_rect()
self.rect.y = y
self.rect.x = x

self.isJump = False
self.jumpCount = 9

def update(self, pressed_keys):

if pressed_keys[K_a]:
self.rect.move_ip(-10, 0)
if pressed_keys[K_d]:
self.rect.move_ip(10, 0)

if pressed_keys[K_LEFT]:
self.rect.move_ip(-10, 0)
if pressed_keys[K_RIGHT]:
self.rect.move_ip(10, 0)

if self.rect.left < 0:
self.rect.left = 0
if self.rect.right > SCREEN_WIDTH:
self.rect.right = SCREEN_WIDTH
if self.rect.top <= 0:
self.rect.top = 0
if self.rect.bottom >= 970:
self.rect.bottom = 970

def jump(self):
if self.isJump:
if self.jumpCount >= -10:
neg = 3
if self.jumpCount < 0:
neg = -3
self.rect.y -= self.jumpCount**2 * 0.101 * neg
self.jumpCount -= 1
else:
self.isJump = False
self.jumpCount = 9

class Platform(pygame.sprite.Sprite):
def __init__(self, xloc, yloc):
super(Platform, self).__init__()
self.surf = pygame.image.load('C:\Sprites\kocka.png').convert()
self.surf.set_colorkey((255, 255, 255), RLEACCEL)
self.rect = self.surf.get_rect()
self.rect.y = yloc
self.rect.x = xloc

pygame.init()
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

pygame.display.set_caption('gameee')
platform = Platform(1, 527)
player = Player(1, 969)

all_sprites = pygame.sprite.Group()
all_sprites.add(platform)
all_sprites.add(player)


clock = pygame.time.Clock()
run = True
while run:
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
run = False
elif event.key == K_SPACE:
player.isJump = True

elif event.type == QUIT:
run = False

clock.tick(35)
screen.blit(player.surf, player.rect)
screen.fill((28, 173, 234))
for entity in all_sprites:
screen.blit(entity.surf, entity.rect)
pygame.display.flip()

pressed_keys = pygame.key.get_pressed()

player.jump()
player.update(pressed_keys)

pygame.display.update()
pygame.quit()```

最佳答案

在平台游戏中执行碰撞测试时,您必须始终考虑玩家的移动方向。当玩家从上方或下方撞击平台时,他们的 react 是不同的。这可能会导致您的代码出现不同的情况。
我将根据您的代码为您提供一个如何登陆平台的示例。

首先,更正让玩家跳跃的代码。为跳跃计数添加一个常量并四舍五入玩家的 y 坐标。所以玩家在向上移动时落在相同的距离上:

JUMP_COUNT = 10

class Player(pygame.sprite.Sprite):
def __init__(self, x, y):
# [...]

self.isJump = False
self.jumpCount = JUMP_COUNT

# [...]

def jump(self):
if self.isJump:
if self.jumpCount >= -JUMP_COUNT:
neg = 3
if self.jumpCount < 0:
neg = -3
self.rect.y -= round(self.jumpCount**2 * 0.101 * neg)
self.jumpCount -= 1
else:
self.isJump = False
self.jumpCount = JUMP_COUNT
在移动玩家之前保存玩家的 y 坐标。在玩家移动后检查碰撞。如果玩家跌倒并检测到碰撞,请将玩家的底部放在平台顶部:
run = True
while run:
# [...]

prev_y = player.rect.y

player.jump()
player.update(pressed_keys)

if player.rect.colliderect(platform.rect):
dir_y = player.rect.y - prev_y
if dir_y > 0:
player.isJump = False
player.jumpCount = JUMP_COUNT
player.rect.bottom = platform.rect.top

pygame.display.update()

关于python - 如何创建一个 "Solid" block ?小游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66749450/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com