我有一个红色的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返回“无”,但我确定红色像素已被“扫描”“。”
答案 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
的原因。