当精灵离开屏幕时,将精灵移动到另一侧Pygame
问题描述:
如果我有一个精灵(见下文),我可以四处移动,屏幕上有箭头键。 (向上和向下移动,向左和向右转动。) 我想知道当它熄灭时是否可以移动到屏幕的另一侧?但是,无论角度如何,它都可以工作,所以如果它的一半被驱动到边缘,一半出现在一边。 (有点像蛇)有没有办法做到这一点?当精灵离开屏幕时,将精灵移动到另一侧Pygame
这里是我到目前为止的代码:
import sys, pygame, math
from pygame.locals import *
pygame.init()
SCREEN = pygame.display.set_mode((800, 600))
car = pygame.transform.scale(pygame.image.load('Car.png').convert_alpha(), (64, 64))
pygame.display.set_caption('Car Game')
pygame.display.set_icon(car)
FPS = pygame.time.Clock()
carX = 400
carY = 100
angle = 90
speed = 0
while True:
if angle == 360: angle = 0
if angle == -1: angle = 359
SCREEN.fill((0,0,0))
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
keys = pygame.key.get_pressed()
if keys[K_a] or keys[K_LEFT]:
angle += speed
elif keys[K_d] or keys[K_RIGHT]:
angle -= speed
if keys[K_w] or keys[K_UP]:
speed += 1
elif keys[K_s] or keys[K_DOWN]:
speed -= 0.5
carX += speed*math.cos(math.radians(angle))
carY -= speed*math.sin(math.radians(angle))
speed *= 0.95
rotcar = pygame.transform.rotate(car, angle)
position = rotcar.get_rect(center = (carX,carY))
SCREEN.blit(rotcar, position)
pygame.display.update()
FPS.tick(24)
答
我不是太熟悉,pygame的,但我认为this game(MD5:92f9f508cbe2d015b18376fb083e0064文件:spacegame.zip)有你的特点寻找。
def draw(self, surface):
wrap = 0
for s in self.sprites():
r = s.rect
if r.left<0:
r.move_ip(800, 0)
wrap = 1
elif r.right > 800:
r.move_ip(-800, 0)
wrap = 1
if r.top < 0:
r.move_ip(0, 600)
wrap = 1
elif r.bottom > 600:
r.move_ip(0, -600)
wrap = 1
if wrap:
surface_blit(s.image, r)
wrap = 0
后:感谢作者,DR0ID_,为使公开发布对his/her website
要实现你的车游戏“环绕”的功能,我从“game.py”使用此功能一些调整我结束了这个工作的例子:
import sys, pygame, math
from pygame.locals import *
pygame.init()
# Added HEIGHT and WIDTH as fixed variables
WIDTH = 800
HEIGHT = 600
SCREEN = pygame.display.set_mode((WIDTH, HEIGHT))
car = pygame.transform.scale(pygame.image.load('Car.png').convert_alpha(), (64, 64))
pygame.display.set_caption('Car Game')
pygame.display.set_icon(car)
FPS = pygame.time.Clock()
carX = 400
carY = 100
angle = 90
speed = 0
while True:
if angle == 360: angle = 0
if angle == -1: angle = 359
SCREEN.fill((0,0,0))
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
keys = pygame.key.get_pressed()
if keys[K_a] or keys[K_LEFT]:
angle += speed
elif keys[K_d] or keys[K_RIGHT]:
angle -= speed
if keys[K_w] or keys[K_UP]:
speed += 1
elif keys[K_s] or keys[K_DOWN]:
speed -= 0.5
carX += speed*math.cos(math.radians(angle))
carY -= speed*math.sin(math.radians(angle))
speed *= 0.95
rotcar = pygame.transform.rotate(car, angle)
position = rotcar.get_rect(center = (carX,carY))
# Basically a copy/paste of the "draw"-function from the spacegame.zip
wrap_around = False
if position[0] < 0 :
# off screen left
position.move_ip(WIDTH, 0)
wrap_around = True
if position[0] + rotcar.get_width() > WIDTH:
# off screen right
position.move_ip(-WIDTH, 0)
wrap_around = True
if position[1] < 0:
# off screen top
position.move_ip(0, HEIGHT)
wrap_around = True
if position[1] + rotcar.get_height() > HEIGHT:
# off screen bottom
position.move_ip(0, -HEIGHT)
wrap_around = True
if wrap_around:
SCREEN.blit(rotcar, position)
position[0] %= WIDTH
position[1] %= HEIGHT
carX %= WIDTH
carY %= HEIGHT
SCREEN.blit(rotcar, position)
pygame.display.update()
FPS.tick(24)
我不熟悉pygame,所以这里是你的起点。您正在寻找的_term_要描述您想要实现的是** wraping **还是** wraparound **,因为当您的对象进入_off_屏幕时,它将回到另一侧,而不是_side scrolling_。 要实现这一点,首先要改变你的汽车在屏幕上的位置;一个简单的pygame例子可以在这里看到[screen wrap boundaries](http://cs.iupui.edu/~aharris/pygame/ch08/wrap.py)。看看'def checkBounds(self)'函数。 –
@JonathonOgden是否有一半的车出现在两侧? –
我会为你调查。我认为如果你把它放在屏幕上/屏幕上,那么pygame不会处理双方汽车各部分的绘图吗? –