有很多代码,但大部分是必要的。它被命名是为了试图清楚地理解。我试图让它跳跃,但当我到达空间时,它只会上升一点并停留在那里。我想利用空间,让它跳跃相当多,然后用合理的物理原理降落回来。如果有人知道如何做到这一点,那将非常有帮助。我不确定您将如何使用pygame执行此操作。
import pygame, sys, time, random
from pygame.locals import *
class Entity(pygame.sprite.Sprite):
"""Inherited by any object in the game."""
def __init__(self, x, y, width, height):
pygame.sprite.Sprite.__init__(self)
self.x = x
self.y = y
self.width = width
self.height = height
# This makes a rectangle around the entity, used for anything
# from collision to moving around.
self.rect = pygame.Rect(self.x, self.y, self.width, self.height)
class Duck(Entity):
"""
Player controlled or AI controlled, main interaction with
the game
"""
def __init__(self, x, y, width, height):
super(Duck, self).__init__(x, y, width, height)
self.image = duck
class Player(Duck):
"""The player controlled Duck"""
def __init__(self, x, y, width, height):
super(Player, self).__init__(x, y, width, height)
# How many pixels the Player duck should move on a given frame.
self.x_change = 0
# How many pixels the spaceship should move each frame a key is pressed.
self.x_dist = 5
def MoveKeyDown(self, key):
"""Responds to a key-down event and moves accordingly"""
if (key == pygame.K_LEFT or key == pygame.K_a):
self.x_change += -self.x_dist
elif (key == pygame.K_RIGHT or key == pygame.K_d):
self.x_change += self.x_dist
elif (key == pygame.K_SPACE):
self.jump()
def MoveKeyUp(self, key):
"""Responds to a key-up event and stops movement accordingly"""
if (key == pygame.K_LEFT or key == pygame.K_a):
self.x_change += self.x_dist
elif (key == pygame.K_RIGHT or key == pygame.K_d):
self.x_change += -self.x_dist
elif (key == pygame.K_SPACE):
self.jump()
def jump(self):
self.rect.y -= 3
def update(self):
"""
Moves the duck while ensuring it stays in bounds
"""
# Moves it relative to its current location.
self.rect.move_ip(self.x_change, 0)
# If the duck moves off the screen, put it back on.
if self.rect.x <= 0:
self.rect.x = 0
elif self.rect.x > window_width:
self.rect.x = window_width
pygame.init()
FPS = 60 # frames per second setting
clock = pygame.time.Clock()
window_width = 1000
window_height = 600
# set up the window
screen = pygame.display.set_mode((window_width, window_height))
pygame.display.set_caption('Deterred Journey')
duck = pygame.image.load('walkingduck.png')
duck = pygame.transform.scale(duck, (160, 180))
player = Player(0, (window_height)-175, 120, 160) #Making player object(duck)
all_sprites_list = pygame.sprite.Group()
all_sprites_list.add(player)
while True: # the main game loop
for event in pygame.event.get(): #Closes game
if event.type == QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYUP:
player.MoveKeyUp(event.key)
elif event.type == pygame.KEYDOWN:
player.MoveKeyDown(event.key)
all_sprites_list.draw(screen)
pygame.display.flip()
pygame.display.update()
有一种非常简单的方法可以将重力实现到您的游戏中。首先,输入一个变量来控制您的速度。在此示例中,它是 y_speed
。
y_speed = 0
现在,而不是
def jump(self):
self.rect.y -= 3
使用此代码
def jump(self):
y_speed = -3
While true:
y_speed += 1
self.rect.y +-= y_speed
这样当你跳跃时,你总是会摔倒,就像现实生活一样,你可能会摔得更快。为了确保您不会从屏幕上掉下来,请实现某种冲突检测,如下所示:
def jump(self):
y_speed = -3
While true:
y_speed += 1
self.rect.y +-= y_speed
if self.rect.colliderect([some sort of object representing the ground].rect):
y_speed = 0
这是一种非常简单的方法,我不太使用Classes
,但这应该希望有助于为您提供基本的引力,并能够纵以处理您的代码。