私はゲームを設計していて、スクリプト変数をメートルからピクセルに変換する必要があります。私の換算係数は30です。30ピクセルから1メートル。コードには、ゲームエンジン、ゲームレベル、スクリプトの3つのレベルがあります。
ゲームエンジンは、基本クラスから新しいゲームレベルの「curmap」を作成します。ゲーム内のすべてのフレームで、エンジンはcurmap.animateを呼び出します。これは、ゲーム内のすべてのオブジェクトがブリットされる場所のリストを返します。レベルは、レベル内のすべてのオブジェクトを反復処理し、各オブジェクトでanimateを呼び出します。
私の問題
私が抱えている問題は、Level-animateメソッドで、player-animateメソッドがplayer-class-variablesへの直接参照を返すことです。Level-animateの2つのコメント行は、戻り値のみを変更することを目的としていましたが、代わりに、player-variablesを変更しています。これをテストクラスで再現できないので、完全に途方に暮れています。
プレーヤースクリプトを変更せずに、これら2つのインライン乗算ステートメントのコメントを解除するにはどうすればよいですか?
ゲームエンジン:
# fps is an instance of pygame.time.clock()
# events is a modified list of pygame.event.get()
for item in curmap.animate(fps.tick()/1000, events):
screen.blit(curmap.assets['textures'][item[0]],item[1],item[2])
レベル:
def animate(self, timedelta, events):
returns = []
for item in self.objects:
ret = item.animate(timedelta, events)
#ret[1][0] *= 30
#ret[1][1] *= 30
returns.append(ret)
return returns
プレーヤースクリプト:
def animate(self, timedelta, input):
# Process Inputs
for item in input['keydown']:
self.keydown.append(item)
for item in input['keyup']:
self.keydown.remove(item)
# Change Velocity and Position
if "left" in self.keydown:
self.velocity[0] = 5
elif 'right' in self.keydown:
self.velocity[0] = -5
else: self.velocity[0] = 0
print(self.position, self.velocity)
self.position[0] += self.velocity[0]*timedelta
self.position[1] += self.velocity[1]*timedelta
# Change Sprite
self.time += timedelta
if self.time > self.altertime:
self.current = (self.current+1)%2
self.time -= self.altertime
return [self.image, self.position, self.sprite[self.current] + self.dimensions]