pygame的get_at对我不起作用

时间:2017-07-14 18:43:17

标签: python pygame

我有一个红色的pixeled图像,我希望另一个图像在红色像素处显示,所以我做了这个代码:

import sys, pygame
pygame.init()
from pygame.locals import *
import time

#the function with get at
def colorscan(rect):
    red = ( 255   ,   0    ,   0   ,  255   )


    for x in range(rect[0],rect[0]+rect[2]+1):
        for y in range(rect[1],rect[1]+rect[3]+1):
            print(x,y)
            if tuple(screen.get_at((x,y)))==red:
                print(x,y,"done")
                return (x,y)
def load(path):
    x = pygame.image.load(path)
    return x

beam   = load("menu/beam.png")
w_plat = load("menu/w_plat.png")

videoinfo = pygame.display.Info()
fullscreen = pygame.FULLSCREEN

screen = pygame.display.set_mode((videoinfo.current_w,videoinfo.current_h), fullscreen, 32)
time = pygame.time.Clock()

#main loop
while True:
    beamrect = screen.blit(beam,(0,0))
    xtl,ytl=beamrect.topleft
    w_pos=colorscan( (xtl,ytl,35,+35) )
    screen.blit(w_plat, w_pos)

我的代码太大了所以我在这里写了什么很重要。无论如何,当我运行它时,我得到这个错误:

追踪(最近一次通话):   文件“C:\ Users \AndréLuiz\ Desktop \ Equilibrium \ Equilibrium.py”,第171行,in     screen.blit(w_plat,w_pos) TypeError:blit的无效目标位置

检查后,打印w_pos返回“无”,但我确定红色像素已被“扫描”“。”

1 个答案:

答案 0 :(得分:0)

我认为发生的事情是for循环被破坏

for x in range(rect[0],rect[0]+rect[2]+1):
    for y in range(rect[1],rect[1]+rect[3]+1):

不执行,或者if语句未执行,因为它的条件不符合:

if tuple(screen.get_at((x,y)))==red:(例如:!= red时未执行)

因为它是您返回值的唯一位置。否则,当函数未指定返回值时,它将返回None

colorscan()没有默认返回值,这就是您获得None的原因。