اتبعت Pygame وTilesets تعليمات الاستخدام، لكني ظهرت لي رسالة الخطأ "noneType".
سؤال
إصدار Python الخاص بي هو 3.2، وPygame هو 1.9.1.
لقد اتبعت الجزء الأول من التعليمات الموجودة هنا: http://wiki.sheep.art.pl/Tiled%20Map%20in%20PyGame, ، مع بعض التعديلات لتناسب مجموعة البلاط الخاصة بي:
def load_tileset(filename, width, height):
image = pygame.image.load(filename).convert_alpha()
imageWidth, imageHeight = image.get_size()
tileSet = []
for tileX in range(0, 3):
line = []
tileSet.append(line)
for tileY in range(0, 3):
rect = (tileX*width, tileY*height, width, height)
line.append(image.subsurface(rect))
if __name__=='__main__':
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('Tiled Background')
screen.fill((240, 240, 255))
table = load_tileset('tableset.gif', 16, 16)
for x, row in enumerate(table):
for y, tile in enumerate(row):
screen.blit(tile, (x*24, y*24))
pygame.display.flip()
while pygame.event.wait().type != pygame.locals.QUIT:
pass
أحصل على خطأ Nontype في for x, row in enumerate(table):
*.لقد جربت أشياء مختلفة، حتى نقل مجموعة البلاط نفسها وتغيير نوع الملف.لقد قمت أيضًا بتجربة رموز أخرى، مثل range.
لقد تمكنت من تحميل الصور في الماضي، وهذه هي المرة الأولى التي أحاول فيها استخدام مجموعة البلاط.تحتوي مجموعة البلاط على 9 بلاطات مقاس 16 × 16، وتوجد فيها بعض الشفافية (وبالتالي convert_alpha()
).
لذلك، يمكن لأي شخص أن يقول لماذا حصلت على NoneType
خطأ هنا؟هل له علاقة بالصورة؟(لاحظ أن سبب وجود الرقم 3 في "بالنسبة لـ TileX في النطاق" هو أنه لن يقبل الحساب على أنه الرابع في البرنامج التعليمي، لذلك قمت بإجراء العمليات الحسابية بنفسي.)
- يحرر:كتبت بالصدفة:
for x, row in range(table):
بدلاً منfor x, row in enumerate(table):
في وصف.
المحلول
أنت لا تنشر الكود الكامل، أو أنك ارتكبت خطأً:لا يوجد for x, row in range(table)
السطر في الكود أعلاه.باستخدام هذا الكود المحدد، يبدو أنك تحاول سحب متغيرين من ملف range
الدالة، ولكنها تُرجع قيمة واحدة فقط في كل مرة.
ربما كنت تقصد الكتابة for x, row in enumerate(table)
.في هذه الحالة، تحتاج إلى إرجاع كائن عند الاتصال table = load_tileset('tableset.gif', 16, 16)
لأنه ما لم يتم إخبار أي وظيفة معينة بشكل صريح return
كائن، وسوف يعود None
ولهذا السبب يسبب لك الخط مشكلة، لأن type
ل None
يكون Nonetype
فيما يلي مثال على إرجاع دالة None
ومن ثم إرجاع سلسلة، a returned string
:
def thisFuncReturnsNone():
pass
print 'what gets returned:', thisFuncReturnsNone()
>>> None
def thisFuncReturnsAString():
return 'a returned string'
print 'what gets returned a second time:', thisFuncReturnsAString()
>>> a returned string