【发布时间】:2018-12-09 03:59:54
【问题描述】:
我在尝试与我在 pygame 中的精灵发生碰撞(以及其他一些问题)时遇到了一些麻烦。我想要做的是当一个小叉子(精灵被命名为 mini1、mini2 等)击中马铃薯时,一颗心应该消失。我什至不确定如何开始碰撞。我查的时候,有提到使用类,但我没有学过,所以我没有使用那个方法。
这是我目前所拥有的:
import pygame, sys
from pygame_functions import *
pygame.mixer.pre_init(44100,16,2,4096)
pygame.init()
width = 1200
height = 750
screen = pygame.display.set_mode((480, 320))
pygame.display.set_caption('Space Potato')
screenSize(width, height)
setBackgroundImage("space.bmp")
pygame.mixer.music.load("bgmusic.wav")
pygame.mixer.music.set_volume(0.5)
pygame.mixer.music.play(-1)
door = makeSprite("door.png")
moveSprite(door, 570, 30)
showSprite(door)
potato = makeSprite("potato.bmp")
moveSprite(potato, 550, 650)
showSprite(potato)
mini1 = makeSprite("minifork.bmp")
showSprite(mini1)
mini1x = 590
mini1y = 150
mini2 = makeSprite("minifork.bmp")
showSprite(mini2)
mini2x = 590
mini2y = 150
mini3 = makeSprite("minifork.bmp")
showSprite(mini3)
mini3x = 590
mini3y = 150
mini4 = makeSprite("minifork.bmp")
showSprite(mini4)
mini4x = 590
mini4y = 150
mini5 = makeSprite("minifork.bmp")
showSprite(mini5)
mini5x = 590
mini5y = 150
mini6 = makeSprite("minifork.bmp")
showSprite(mini6)
mini6x = 590
mini6y = 150
mini7 = makeSprite("minifork.bmp")
showSprite(mini7)
mini7x = 590
mini7y = 150
mini8 = makeSprite("minifork.bmp")
showSprite(mini8)
mini8x = 590
mini8y = 150
mini9 = makeSprite("minifork.bmp")
showSprite(mini9)
mini9x = 590
mini9y = 150
mini10 = makeSprite("minifork.bmp")
showSprite(mini10)
mini10x = 590
mini10y = 150
mini11 = makeSprite("minifork.bmp")
showSprite(mini11)
mini11x = 590
mini11y = 150
fork = makeSprite("fork.bmp")
moveSprite(fork, 570, 100)
showSprite(fork)
heart1 = makeSprite("heart.bmp")
moveSprite(heart1, 10, 10)
showSprite(heart1)
heart2 = makeSprite("heart.bmp")
moveSprite(heart2, 60, 10)
showSprite(heart2)
heart3 = makeSprite("heart.bmp")
moveSprite(heart3, 110, 10)
showSprite(heart3)
xPos = 550
yPos = 650
xSpeed = 0
ySpeed = 0
moveSprite(potato,xPos, yPos)
while True:
mini1y += 10
if mini1y == height - 10:
mini1y = 150
mini1x = 590
moveSprite(mini1, mini1x, mini1y)
mini2x -= 10
mini2y += 5
if mini2y == height - 10:
mini2y = 150
mini2x = 590
moveSprite(mini2, mini2x, mini2y)
mini3x += 2
mini3y += 10
if mini3y == height - 10:
mini3y = 150
mini3x = 590
moveSprite(mini3, mini3x, mini3y)
mini4x += 15
mini4y += 2
if mini4y == height - 10:
mini4y = 150
mini4x = 590
moveSprite(mini4, mini4x, mini4y)
mini5x -= 5
mini5y += 10
if mini5y == height - 10:
mini5y = 150
mini5x = 590
moveSprite(mini5, mini5x, mini5y)
mini6x -= 10
mini6y += 7
if mini6y == height - 10:
mini6y = 150
mini6x = 590
moveSprite(mini6, mini6x, mini6y)
mini7x += 10
mini7y -= 2
if mini7y == height - 10:
mini7y = 150
mini7x = 590
moveSprite(mini7, mini7x, mini7y)
mini8x -= 5
mini8y += 10
if mini8y == height - 10:
mini8y = 150
mini8x = 590
moveSprite(mini8, mini8x, mini8y)
mini9x += 5
mini9y -= 10
if mini9y == height - 10:
mini9y = 150
mini9x = 590
moveSprite(mini9, mini9x, mini9y)
mini10x -= 10
mini10y -= 7
if mini10x == width - 10:
mini10y = 150
mini10x = 590
moveSprite(mini10, mini10x, mini10y)
mini11x -= 10
mini11y -= 7
if mini11x == width - 10:
mini11y = 150
mini11x = 590
moveSprite(mini11, mini11x, mini11y)
if keyPressed("up"):
transformSprite(potato, 0, 1)
yPos -= 7
elif keyPressed("down"):
transformSprite(potato, 0, 1)
yPos += 7
elif keyPressed("right"):
transformSprite(potato, 0, 1)
xPos += 7
elif keyPressed("left"):
transformSprite(potato, 0, 1)
xPos -= 7
moveSprite(potato, xPos, yPos)
tick(30)
endWait()
我还有另一个问题,我的一些小叉子不会循环。我不太确定为什么会这样。任何帮助表示赞赏。
【问题讨论】:
-
欢迎来到 Stack Overflow,请分享minimal reproducible example,以便其他人可以运行您的代码并帮助您解决问题。在您的代码中,没有
makeSprite函数的定义。也许this question 会帮助你。使用sprite groups 将使您更轻松地处理冲突和更新。