【问题标题】:-805306369 (0xCFFFFFFF) error in python what can i dopython中的-805306369(0xCFFFFFFF)错误我该怎么办
【发布时间】:2020-11-08 16:36:17
【问题描述】:

我对 python 很陌生,最近开始使用 pygame 进行游戏开发。我想知道为什么我的游戏只是冻结并且出现退出代码 -805306369 (0xCFFFFFFF)。我的程序有错误吗?它看起来像这样:

import pygame
import random
import math

pygame.init()
window = pygame.display.set_mode((1000, 600))
caption = pygame.display.set_caption(
    'Test your reaction speed. Shoot the target game!')  # sets a caption for the window
run = True
PlayerImg = pygame.image.load('F:\PythonPortable\oscn.png')
PlayerX = 370
PlayerY = 420
PlayerX_change = 0
PlayerY_change = 0


def player():
    window.blit(PlayerImg, (PlayerX, PlayerY))


aim_sight = pygame.image.load('F:\PythonPortable\ktarget.png')
aim_sightX = 460
aim_sightY = 300
aim_sight_changeX = 0
aim_sight_changeY = 0


def aim_sight_function(x, y):
    window.blit(aim_sight, (x, y))


targetedImg = pygame.image.load('F:\PythonPortable\ktargetedperson.png')
targetedX = random.randint(0, 872)
targetedY = random.randint(0, 200)


def random_target():
    window.blit(targetedImg, (targetedX, targetedY))


def iscollision(targetedX, targetedY, aim_sightX, aim_sightY):
    distance = math.sqrt((math.pow(targetedX - aim_sightX, 2)) + (math.pow(targetedY - aim_sightY, 2)))
    if distance < 70:
        return True
    else:
        return False
while run:
    window.fill((255, 255, 255))
    random_target()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                aim_sight_changeX = -2
                PlayerX_change = -2
            elif event.key == pygame.K_RIGHT:
                aim_sight_changeX = 2
                PlayerX_change = 2
            elif event.key == pygame.K_UP:
                aim_sight_changeY = -2
                PlayerY_change = -2
            elif event.key == pygame.K_DOWN:
                aim_sight_changeY = 2
                PlayerY_change = 2
            score = 0
            while score < 10:
                collision = iscollision(targetedX, targetedY, aim_sightX, aim_sightY)
                if collision and event.key == pygame.K_SPACE:
                    print("HIT") # Just for me to acknowledge that collision is true and space bar was pressed in the right spot
                    score = score + 1
        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                aim_sight_changeX = 0
                PlayerX_change = 0
            elif event.key == pygame.K_UP or event.key == pygame.K_DOWN:
                aim_sight_changeY = 0
                PlayerY_change = 0
    aim_sightX += aim_sight_changeX
    if aim_sightX <= 46.5:
        aim_sight_changeX = 0
    elif aim_sightX >= 936:
        aim_sight_changeX = 0
    aim_sightY += aim_sight_changeY
    if aim_sightY <= 0:
        aim_sight_changeY = 0
    elif aim_sightY >= 400:
        aim_sight_changeY = 0

    PlayerX += PlayerX_change
    if PlayerX <= -50:
        PlayerX_change = 0
    elif PlayerX >= 850:
        PlayerX_change = 0

    player()
    aim_sight_function(aim_sightX, aim_sightY)
    pygame.display.update()

我认为这方面存在错误,因为没有它我的程序运行良好。

 while score < 10:
                collision = iscollision(targetedX, targetedY, aim_sightX, aim_sightY)
                if collision and event.key == pygame.K_SPACE:
                    print("HIT") # Just for me to acknowledge that collision is true and space bar was pressed in the right spot
                    score = score + 1

我检查了其他问题,但它们大多是针对 java 和其他语言的。

【问题讨论】:

  • score没有被修改的情况下你有一个无限循环。
  • while score &lt; 10: -> if score &lt; 10:

标签: python python-3.x pygame exit-code


【解决方案1】:

您有一个应用程序循环。您不需要额外的循环来控制游戏。增加分数的循环是一个无限循环。将循环更改为选择(将 while 更改为 if)。
此外,分数必须在应用程序循环之前初始化:

score = 0
while run:
    # [...]

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                aim_sight_changeX = -2
                PlayerX_change = -2
            elif event.key == pygame.K_RIGHT:
                # [...]

            elif event.key == pygame.K_SPACE:
                if score < 10:
                    collision = iscollision(targetedX, targetedY, aim_sightX, aim_sightY)
                    if collision:
                        print("HIT") 
                        score = score + 1

【讨论】:

  • 就每次将分数加一而言,这是行不通的。我已经对程序进行了翻新,因此目标会重新生成,但如果没有一段时间或 for 循环,分数将无法正常工作。对吗?
  • @Ght007 当然,乐谱可以在没有额外循环的情况下工作。你有一个循环。你有应用程序循环。 while run: 是你的循环。你说的“每次加一个分数”是什么意思?你必须在正确的时刻点击“SPACE”。您是否正在寻找可以按住“SPACE”的解决方案?
猜你喜欢
  • 2021-08-06
  • 1970-01-01
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
  • 2013-03-01
  • 1970-01-01
  • 2021-04-27
  • 1970-01-01
相关资源
最近更新 更多