اتبعت Pygame وTilesets تعليمات الاستخدام، لكني ظهرت لي رسالة الخطأ "noneType".

StackOverflow https://stackoverflow.com//questions/11659589

سؤال

إصدار 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top