社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

OddsOver1 • 3 年前 • 381 次点击  

我正在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 年前