Py学习  »  Python

我如何解决屏幕上的这个问题。python中pygame中的blit?

OddsOver1 • 3 年前 • 383 次点击  

我正在YouTube上观看一个关于如何制作太空入侵者游戏的教程,但我无意中遇到了一个问题,我得到了一个错误的提示: invalid destination position for blit ,如何修复此错误?谢谢 我正在windows 10家用电脑上使用Python3.10.4和spyder IDE。 非常感谢您的回答。

控制台表示错误来自第54行,在本例中是以下代码:

53> def enemy(x, y, i):
54>     screen.blit(enemyImg[i], (x, y))

代码:

import pygame
import random
import math

# Intiatize the pygame
pygame.init()

# Create the screen
screen = pygame.display.set_mode((800, 600))

# Background
background = pygame.image.load("background.png")

# Caption and Icon
pygame.display.set_caption("Space Invaders")
icon = pygame.image.load("icon.png")
pygame.display.set_icon(icon)

# Player
playerImg = pygame.image.load("player.png")
playerX = 370
playerY = 480
playerX_change = 0

# Enemy
enemyImg = []
enemyX = []
enemyY = []
enemyX_change = []
enemyY_change = []
num_of_enemies = 6

for i in range(num_of_enemies):
    enemyImg.append(pygame.image.load("enemy.png"))
    enemyX.append(random.randint(0, 735))
    enemyY.append(random.randint(50, 150))
    enemyX_change.append(0.1)
    enemyY_change.append(40)

# Bullet1
bullet1Img = pygame.image.load("bullet1.png")
bullet1X = 0
bullet1Y = 480
bullet1X_change = 0
bullet1Y_change = 0.5
bullet_state = "ready"

score = 0

def player(x, y):
    screen.blit(playerImg, (x, y))
    
def enemy(x, y, i):
    screen.blit(enemyImg[i], (x, y))
    
def fire_bullet1(x, y): 
    global bullet_state
    bullet_state = "fire"
    screen.blit(bullet1Img, (x, y + 10))
    
def isCollision(enemyX, enemyY, bullet1X, bullet1Y):
    distance = math.sqrt(math.pow(enemyX-bullet1X,2)) + (math.pow(enemyY-bullet1Y,2))
    if distance < 27:
        return True
    else:
        return False

# Game Loop
running = True
while running:
    screen.fill((255, 255, 255))
    # Background Image
    screen.blit(background, (0,0))
    
    # Checking for boundaries of spaceship
    playerX += playerX_change
    
    if playerX <=0:
        playerX = 0
    elif playerX >=736:
        playerX = 736
    
    # Enemy Movement
    for i in range(num_of_enemies):
        enemyX[i] += enemyX_change[i]
        if enemyX[i] <=0:
            enemyX_change[i] = 0.1
            enemyY[i] += enemyY_change[i]
        elif enemyX[i] >=736:
            enemyX_change[i] = -0.1
            enemyY[i] += enemyY_change[i]
            
        # Collision
        collision = isCollision(enemyX[i], enemyY[i], bullet1X, bullet1Y)
        if collision:
            bullet1Y = 480
            bullet_state = "ready"
            score += 1
            print(score)
            enemyX[i] = random.randint(0, 735)
            enemyY[i] = random.randint(50, 150)
            
        enemy(enemyX[i], enemyY[i], i)
        
    # Bullet Movement
    if bullet1Y <=0:
        bullet1Y = 480
        bullet_state = "ready"
        
    if bullet_state is "fire":
        fire_bullet1(bullet1X, bullet1Y)
        bullet1Y -= bullet1Y_change
    
    player(playerX, playerY)
    enemy(enemyX, enemyY, i)
    pygame.display.update()
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
            pygame.quit()
            
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                playerX_change = -0.3
            if event.key == pygame.K_RIGHT:
                playerX_change = +0.3
            if event.key == pygame.K_SPACE:
                if bullet_state is "ready":
                    bullet1X = playerX
                    fire_bullet1(bullet1X, bullet1Y)
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                playerX_change = 0 
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/131440
文章 [ 1 ]  |  最新文章 3 年前
Rabbid76
Reply   •   1 楼
Rabbid76    3 年前

enemyX enemyY 以下是清单:

enemy(enemyX, enemyY, i)

enemy(enemyX[i], enemyY[i], i)