我正在用pygame制作一个简单的游戏。它希望成为一个平台游戏RPG。但对于这个问题,这既不是最终的也不是相关的。到目前为止,我在游戏中的功能非常少。如果那样的话,这只是一个骨架。我的问题有两点:
我已经看过其他关于在游戏之后添加重力的帖子,其中在初始开发期间没有考虑添加它。我想尽早添加它,而不是将重力添加到其他东西,我可以添加其他东西重力。我将继续阅读这篇文章,所以如果您希望将我指向一些在线资源的方向,我也非常感谢!
答案 0 :(得分:0)
快速排除:我不知道多种方法来引入重力,所以我不能说哪个是最好的"。但是,如果你在Python中与性能战斗争,你可能会打错战。
对于重力,您可以使用矢量系统。假设一个角色跳离地面并且初始速度为[5,-15](负y因为正y向下!),你可以每帧移动角色的矩形以模拟运动。要将重力投入此中,您需要每秒将 9.8添加到您的y速度分量值。因此1秒钟内,速度约为[5,-5]。这将让你的角色慢慢停下来,然后开始向下移动。
对于按键移动,我建议使用布尔值。例如,在按下k_U时,表示您正在向上移动的变量变为True。然后,如果此变量为True,则移动他,例如[0,-5]。在keyup时,将变量设置为false。这样做是为了北/东/南/西,然后你有一个4个方向的移动系统,当你按住键时移动你。
答案 1 :(得分:0)
我在这段代码中使用了1/2 mg ^ 2等式,它具有类似雪的效果:
import math, sys, random, time
import pygame, inputbox
from pygame.locals import *
class flake:
def __init__(self, xpos, ypos, mass, color, drift):
self.xpos = xpos
self.ypos = ypos
self.mass = mass
self.rect = pygame.Rect(xpos, ypos, 2, 2)
self.checked = False
self.color = color
self.drift = drift
size = width, height = 510, 700
BLACK = (0,0,0)
WHITE = (255, 255, 255)
GREY = (128,128,128)
DARKGREY = (169,169,169)
SILVER = (192,192,192)
LIGHTGREY = (211,211,211)
LIGHTESTGREY = (220,220,220)
pygame.init()
screen = pygame.display.set_mode(size)
background = pygame.Surface(screen.get_size())
background = background.convert()
background.fill(BLACK)
def init():
global theSnow, snowColours, clock, startrange
theSnow = []
snowColours = []
snowColours.append(WHITE)
snowColours.append(GREY)
snowColours.append(DARKGREY)
snowColours.append(SILVER)
snowColours.append(LIGHTGREY)
snowColours.append(LIGHTESTGREY)
for c in range(2000):
mass = 0.0
mass = float(random.randint(1,8) / 100.0)
xpos = random.randint(0,width)
ypos = random.randint(0,5)
ypos = -ypos
drift = ypos/10.0
colour = snowColours[random.randint(0,5)]
f = flake(xpos, ypos, mass, colour, drift)
theSnow.append(f)
print "flake x = " + str(f.xpos) + " y = " + str(f.ypos) + " mass = " + str(f.mass)
startrange = 200
clock = pygame.time.Clock()
def run():
global theSnow, clock
global startrange
newrange = 0
while True:
events = pygame.event.get()
for event in events:
if event.type == pygame.QUIT:
sys.exit()
keys=pygame.key.get_pressed()
if keys[K_q]:
return
g = 3
for count in range(startrange):
yinc = 0.0
yuncertainty = float(random.randint(1,5)/10.0)
yinc = float(0.5 * theSnow[count].mass * (g*g)) + yuncertainty
theSnow[count].ypos += yinc
xuncertainty = random.randint(1,10)
if xuncertainty > 4:
theSnow[count].xpos += theSnow[count].drift
else:
theSnow[count].xpos -= theSnow[count].drift
theSnow[count].rect = pygame.Rect(theSnow[count].xpos, theSnow[count].ypos, 2,2)
if not theSnow[count].checked:
if theSnow[count].ypos > 30:
for c in range(newrange, startrange):
print " c= " + str(c)
theSnow[c].checked = True
if startrange < 2000:
startrange += 100
newrange = startrange - 100
print " newrange = " + str(newrange)
print " startrange = " + str(startrange)
update()
pygame.time.wait(10)
#clock.tick(10)
def update():
global theSnow, startrange
background.fill(BLACK)
for count in range(startrange):
pygame.draw.rect(background, theSnow[count].color, theSnow[count].rect)
screen.blit(background, (0, 0))
pygame.display.flip()
if __name__ == "__main__":
init()
run()