私は問題を抱えており、なぜこれが起こっているのか、どのように修正するのか分かりません。私はpythonとpygameを使ってビデオゲームを開発していますが、このエラーが発生しています:
File "/home/matt/Smoking-Games/sg-project00/project00/GameModel.py", line 15, in Update
self.imageDef=self.values[2]
TypeError: 'NoneType' object has no attribute '__getitem__'
コード:
import pygame,components
from pygame.locals import *
class Player(components.Entity):
def __init__(self,images):
components.Entity.__init__(self,images)
self.values=[]
def Update(self,events,background):
move=components.MoveFunctions()
self.values=move.CompleteMove(events)
self.imageDef=self.values[2]
self.isMoving=self.values[3]
def Animation(self,time):
if(self.isMoving and time==1):
self.pos+=1
if (self.pos>(len(self.anim[self.imageDef])-1)):
self.pos=0
self.image=self.anim[self.imageDef][self.pos]
そのエラーが何を意味するのか、なぜそれが起こっているのかを説明してください。
BrenBarnは正しいです。このエラーは、None[5]
のようなことをしようとしたことを意味します。バックトレースでは、self.imageDef=self.values[2]
と表示されます。つまり、self.values
はNone
です。
self.values
を更新するすべての機能を実行し、すべてのコーナーケースを考慮してください。
move.CompleteMove()
は値を返しません(おそらく何かを出力するだけです)。値を返さないメソッドはNone
を返し、None
をself.values
に割り当てました。
次に例を示します。
>>> def hello(x):
... print x*2
...
>>> hello('world')
worldworld
>>> y = hello('world')
worldworld
>>> y
>>>
y
(インタラクティブプロンプトに何も印刷しない唯一の値)であるため、None
は何も印刷しないことに注意してください。
クラス内で使用する関数move.CompleteMove(events)
には、おそらくreturn
ステートメントが含まれていません。したがって、_self.values
_(==> None)には何も返されません。 move.CompleteMove(events)
のreturn
を使用して、_self.values
_に保存したいものを返します。お役に立てれば。