Python 当精灵移出屏幕时,将精灵移动到另一侧

Python 当精灵移出屏幕时,将精灵移动到另一侧,python,python-3.x,pygame,Python,Python 3.x,Pygame,如果我有一个精灵(见下文),我可以移动,屏幕上的箭头键。(上下前后移动,左右转弯。) 我想知道当它关闭时是否可以移动到屏幕的另一侧?但不管角度是多少,它都能工作,所以如果它一半被推向边缘,一半出现在一边。(有点像蛇)有办法做到这一点吗 以下是我目前的代码: import sys, pygame, math from pygame.locals import * pygame.init() SCREEN = pygame.display.set_mode((800, 600)) car = p

如果我有一个精灵(见下文),我可以移动,屏幕上的箭头键。(上下前后移动,左右转弯。) 我想知道当它关闭时是否可以移动到屏幕的另一侧?但不管角度是多少,它都能工作,所以如果它一半被推向边缘,一半出现在一边。(有点像蛇)有办法做到这一点吗

以下是我目前的代码:

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不太熟悉,但我认为(md5:92f9f508cbe2d015b18376fb083e0064文件:spacegame.zip)具有您需要的功能。感谢作者DR0ID_3;在

为了在汽车游戏中实现“环绕”功能,我使用了“game.py”中的这个函数:

def绘图(自身、表面):
换行=0
对于self.sprites()中的s:
r=s.rect
如果r.left 800:
r、 移动ip(-800,0)
包裹=1
如果r.top<0:
r、 移动ip(0600)
包裹=1
如果右下角>600:
r、 移动ip(0,-600)
包裹=1
如果包裹:
表面粗糙度(s.图像,r)
换行=0
经过几次调整后,我最终得到了这个工作示例:

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、数学
从pygame.locals导入*
pygame.init()
#添加高度和宽度作为固定变量
宽度=800
高度=600
SCREEN=pygame.display.set_模式((宽度、高度))
car=pygame.transform.scale(pygame.image.load('car.png')。convert_alpha(),(64,64))
pygame.display.set_标题('汽车游戏')
pygame.display.set_图标(汽车)
FPS=pygame.time.Clock()
carX=400
卡里=100
角度=90
速度=0
尽管如此:
如果角度=360:angle=0
如果角度==-1:角度=359
屏幕填充((0,0,0))
对于pygame.event.get()中的事件:
如果event.type==退出:
pygame.quit()
sys.exit()
keys=pygame.key.get_pressed()
如果键[K_a]或键[K_LEFT]:
角度+=速度
elif键[K_d]或键[K_RIGHT]:
角度-=速度
如果键[K_w]或键[K_UP]:
速度+=1
elif键[K_s]或键[K_DOWN]:
速度-=0.5
carX+=速度*数学cos(数学弧度(角度))
卡里-=速度*数学正弦(数学弧度(角度))
速度*=0.95
rotcar=pygame.transform.rotate(汽车,角度)
位置=旋转小车。获取直线(中心=(小车,小车))
#基本上是spacegame.zip中“draw”函数的复制/粘贴
环绕=假
如果位置[0]<0:
#屏幕左侧
位置。移动ip(宽度,0)
环绕=真
如果位置[0]+旋转小车。获取宽度()>宽度:
#屏幕外右侧
位置。移动ip(-宽度,0)
环绕=真
如果位置[1]<0:
#屏幕外顶部
位置。移动ip(0,高度)
环绕=真
如果位置[1]+旋转小车。获取高度()>高度:
#屏幕外底部
位置。移动ip(0,-高度)
环绕=真
如果环绕:
屏幕blit(旋转小车,位置)
位置[0]=宽度
位置[1]=高度
carX%=宽度
卡里%=身高
屏幕blit(旋转小车,位置)
pygame.display.update()
FPS.勾选(24)

我对pygame不太熟悉,但我认为(md5:92f9f508cbe2d015b18376fb083e0064文件:spacegame.zip)具有您需要的功能。感谢作者DR0ID_3;在

为了在汽车游戏中实现“环绕”功能,我使用了“game.py”中的这个函数:

def绘图(自身、表面):
换行=0
对于self.sprites()中的s:
r=s.rect
如果r.left 800:
r、 移动ip(-800,0)
包裹=1
如果r.top<0:
r、 移动ip(0600)
包裹=1
如果右下角>600:
r、 移动ip(0,-600)
包裹=1
如果包裹:
表面粗糙度(s.图像,r)
换行=0
经过几次调整后,我最终得到了这个工作示例:

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、数学
从pygame.locals导入*
pygame.init()
#添加高度和宽度作为固定变量
宽度=800
高度=600
SCREEN=pygame.display.set_模式((宽度、高度))
car=pygame.transform.scale(pygame.image.load('car.png')。convert_alpha(),(64,64))
pygame.display.set_标题('汽车游戏')
pygame.display.set_图标(汽车)
FPS=pygame.time.Clock()
carX=400
卡里=100
角度=90
速度=0
尽管如此:
如果角度=360:angle=0
如果角度==-1:角度=359
屏幕填充((0,0,0))
对于pygame.event.get()中的事件:
如果event.type==退出:
pygame.quit()
sys.exit()
keys=pygame.key.get_pressed()
如果键[K_a]或键[K_LEFT]:
角度+=速度
elif键[K_d]或键[K_RIGHT]:
角度-=速度
如果键[K_w]或键[K_UP]:
速度+=1
elif键[K_s]或键[K_DOWN]:
速度-=0.5
carX+=速度*数学cos(数学弧度(角度))
卡里-=速度*数学正弦(数学弧度(角度))
速度*=0.95
rotcar=pygame.transform.rotate(汽车,角度)
位置=旋转小车。获取直线(中心=(小车,小车))
#基本上是spacegame.zip中“draw”函数的复制/粘贴
环绕=假
如果位置[0]<0:
#屏幕左侧
位置。移动ip(宽度,0)
环绕=真
如果位置[0]+旋转小车。获取宽度()>宽度:
#屏幕外右侧
位置。移动ip(-宽度,0)
环绕=真
如果位置[1]<0:
#屏幕外顶部
位置。移动ip(0,高度)
环绕=真
如果位置[1]+旋转小车。获取高度()>高度:
#屏幕外底部
位置。移动ip(0,-高度)
环绕=真
如果环绕:
屏幕blit(旋转小车,位置)
位置[0]=宽度
位置[1]=高度
carX%=宽度
卡里%=身高
屏幕blit(旋转小车,位置)
pygame.display.update(