2016-03-01 100 views
0

如果我有一個精靈(見下文),我可以四處移動,屏幕上有箭頭鍵。 (向上和向下移動,向左和向右轉動。) 我想知道當它熄滅時是否可以移動到屏幕的另一側?但是,無論角度如何,它都可以工作,所以如果它的一半被驅動到邊緣,一半出現在一邊。 (有點像蛇)有沒有辦法做到這一點?當精靈離開屏幕時,將精靈移動到另一側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不會處理雙方汽車各部分的繪圖嗎? –

回答

2

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