作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
到目前为止,我的程序从左到右弹跳,但现在我想要在墙壁上弹跳。我怎样才能做到这一点?
delta = 5
u = 1 # x coordinate
u += delta
if u >= 440: #480 is the window size, I have it stopping at 440
delta = -5 #Go back by 5
elif u < 0:
delta = 5 #Go up by 5
更大的代码片段,它有解决方案,但 Sprite 会离开屏幕,要运行代码,请确保您有一张名为“bird.png”的图片或更改图片:
import pygame
import random
class mySprite(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("bird.png")
self.rect = self.image.get_rect()
## slef.rect(50,50,self.image.get_width(), self.image.get_height())
def update(self,x,y):
self.rect.x = x
self.rect.y = y
class newSprite(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("ball.png")
self.rect = self.image.get_rect()
def update(self,x,y):
self.rect.x = x
self.rect.y = y
class otherSprite(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("bird.png")
self.rect = self.image.get_rect()
def update(self,x,y):
self.rect.x = x
self.rect.y = y
def main():
""" Set up the game and run the main game loop """
pygame.init() # prepare the pygame module for use
surfaceSz = 480 # Desired physical surface size, in pixels.
# Create surface of (width, height), and its window.
main_surface = pygame.display.set_mode((surfaceSz, surfaceSz))
small_rect = (300, 200, 150, 90)
some_color = (255,0,0)
main_surface.fill((0,200,255))
s = mySprite()
all_sprites = pygame.sprite.Group()
s.add(all_sprites)
delta_x = 5
delta_y = 5
u = 1 # x coord
v = 1 # y coord
clock = pygame.time.Clock()
while True:
ev = pygame.event.poll() # look for any event
if ev.type == pygame.QUIT: # window close button clicked?
break # ... leave game loop
main_surface.fill((0,200,255))
#u += delta
#if u >= 440:
# delta = -5
#elif u < 0:
# delta = 5
u += delta_x
v += delta_y
if (v >=440): #assuming your y axis is 440 pixels
delta_y = -5
elif v<=0 :
delta_y = 5
if u >= 440: #440 pixels u have
delta = -5
elif u < 0:
delta = 5 #Go up by 5
all_sprites.update(u,50)
pos =(random.randint(0, surfaceSz), random.randint(0, surfaceSz))
all_sprites.draw(main_surface)
# Now the surface is ready, tell pygame to display it!
pygame.display.flip()
clock.tick(60)
pygame.quit() # once we leave the loop, close the window.
main()
最佳答案
这是一只正在移动的鸟/球,它从墙上弹起,首先,您只需要一种类型的 Sprite 类,只需使用不同的图像创建不同的实例即可。希望对您有帮助
import sys, pygame, random
SIZE = width, height = 640, 480
SPEED = [2, 2]
black = 0, 0, 0
class mySprite(pygame.sprite.Sprite):
def __init__(self, image="ball.bmp", speed=[2,2]):
pygame.sprite.Sprite.__init__(self)
self.speed = speed
self.image = pygame.image.load(image)
self.rect = self.image.get_rect()
def update(self):
global SIZE
#i used 110 px because it's the size of the image, but it's better to use the rect property of the pygame
if (self.rect.x <0) or (self.rect.x > 640-110):
self.speed[0] *= -1
if (self.rect.y<0) or (self.rect.y > 480-110):
self.speed[1] *= -1
self.rect.x =self.rect.x + self.speed[0]
self.rect.y =self.rect.y + self.speed[1]
#OR: self.rect = self.rect.move(self.speed)
def draw(self, screen):
screen.blit(self.image, self.rect)
#
pygame.init()
screen = pygame.display.set_mode(SIZE)
iaka = mySprite()
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit()
screen.fill(black)
iaka.draw(screen)
iaka.update()
pygame.display.flip()
关于python - 如何在pygame中使 Sprite 在窗口边缘反弹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23224964/
我是一名优秀的程序员,十分优秀!