【发布时间】:2020-04-18 22:15:55
【问题描述】:
所以我无法弄清楚为什么当在显示屏顶部重新生成时,我无法让图像保持连接和无缝。一旦 rect.top 到达底部(600),我让它们都回到顶部(rect.bottom = 0)。取决于我的速度,他们会做一些有趣的事情,比如分开开始,然后在屏幕顶部一起滑动,或者最终在它们之间保持一致的空间。
任何帮助将不胜感激,或者我可以将图像放在同一个类中并让它在屏幕上重复 6 次并将它们全部移动,这样我就不必执行 6 个不同的道路类。
import pygame
from pygame.locals import *
import sys
import os
W, H = 800, 600
HW, HH = W / 2, H / 2
AREA = W * H
os.environ['SDL_VIDEO_WINDOW_POS'] = "50,50"
FPS = 30
GREEN = (0, 200, 0)
def events():
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
class Road1(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
bkgrnd = pygame.image.load("Images/Road.png").convert_alpha()
self.image = pygame.transform.scale(bkgrnd, (300, 100))
self.rect = self.image.get_rect()
self.rect.x = 100
self.rect.top = 0
self.speedy = 0
def update(self):
self.rect.top += self.speedy
keys = pygame.key.get_pressed()
if keys[pygame.K_w]:
self.speedy += 0.25
if keys[pygame.K_s]:
self.speedy -= 0.25
if self.speedy <= 0:
self.speedy = 0
if self.speedy >= 20:
self.speedy = 20
if self.rect.top >= 600:
self.rect.x = 100
self.rect.bottom = 0
class Road2(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
bkgrnd = pygame.image.load("Images/Road.png").convert_alpha()
self.image = pygame.transform.scale(bkgrnd, (300, 100))
self.rect = self.image.get_rect()
self.rect.x = 100
self.rect.top = 100
self.speedy = 0
def update(self):
self.rect.top += self.speedy
keys = pygame.key.get_pressed()
if keys[pygame.K_w]:
self.speedy += 0.25
if keys[pygame.K_s]:
self.speedy -= 0.25
if self.speedy <= 0:
self.speedy = 0
if self.speedy >= 20:
self.speedy = 20
if self.rect.top >= 600:
self.rect.x = 100
self.rect.bottom = 0
pygame.init()
CLOCK = pygame.time.Clock()
DS = pygame.display.set_mode((W, H))
pygame.display.set_caption("Scrolling")
all_sprites = pygame.sprite.Group()
road = pygame.sprite.Group()
rd1 = Road1()
all_sprites.add(rd1)
road.add(rd1)
rd2 = Road2()
all_sprites.add(rd2)
road.add(rd2)
while True:
CLOCK.tick(FPS)
events()
all_sprites.update()
DS.fill(GREEN)
all_sprites.draw(DS)
pygame.display.flip()
【问题讨论】:
-
这能回答你的问题吗? Seamless scrolling tilemaps
-
@Basil 为什么你认为这个问题以任何方式回答了这个问题?链接的问题甚至没有触及主题。
标签: python pygame smooth-scrolling vertical-scrolling