当精灵离开屏幕时,将精灵移动到另一侧Pygame

问题描述:

如果我有一个精灵(见下文),我可以四处移动,屏幕上有箭头键。 (向上和向下移动,向左和向右转动。) 我想知道当它熄灭时是否可以移动到屏幕的另一侧?但是,无论角度如何,它都可以工作,所以如果它的一半被驱动到边缘,一半出现在一边。 (有点像蛇)有没有办法做到这一点?当精灵离开屏幕时,将精灵移动到另一侧Pygame

Car

这里是我到目前为止的代码:

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) 
+1

我不熟悉pygame,所以这里是你的起点。您正在寻找的_term_要描述您想要实现的是** wraping **还是** wraparound **,因为当您的对象进入_off_屏幕时,它将回到另一侧,而不是_side scrolling_。 要实现这一点,首先要改变你的汽车在屏幕上的位置;一个简单的pygame例子可以在这里看到[screen wrap boundaries](http://cs.iupui.edu/~aharris/pygame/ch08/wrap.py)。看看'def checkBounds(self)'函数。 –

+0

@JonathonOgden是否有一半的车出现在两侧? –

+0

我会为你调查。我认为如果你把它放在屏幕上/屏幕上,那么pygame不会处理双方汽车各部分的绘图吗? –

我不是太熟悉,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) 
+0

不错的工作。几个小时前我只是通过spacegame来源自己看看。 –

+0

@JonathonOgden谢谢!我想谷歌闪耀DR0ID_的太空游戏:) – jDo

+0

它总是很高兴看到我的代码帮助某人,即使它是一个老的。 :) – DR0ID