1

私はゲームを設計していて、スクリプト変数をメートルからピクセルに変換する必要があります。私の換算係数は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]
4

1 に答える 1

2

self.positionメソッドに正確に何が含まれているかは言いませんでしたPlayer.animateが、数値を含む単純なリストの場合は、次のリストをコピーしてください。

return [self.image, self.position[:], self.sprite[self.current] + self.dimensions]

list を返していますPlayer.position。 でそれを変更する (リスト内の値を変更する) と、同じリストで作業しているため、Level.animate実際には を変更しています。Player.position

于 2013-01-28T08:14:50.277 に答える