2017-01-01 3 views
0

私はpython/pygameクラスの新人です。私はゲームを作っています。 私の問題は、私は画面に宇宙船を描くクラスがあると思いますが、何とかxとyにspacemove_x,spacemove_yを追加する必要があります。どうすれば変数をクラスの外部から更新し続けることができますか?

このゲームがあるので、私は自分の宇宙船を移動すると、ユーザーが移動し、彼は自分の宇宙船だ

(私は上から他のものを表示しspacemove_x、あまりにも星のように他のもののための場所を更新するためのspacemove_yを下に使用する場合、これらspacemove_x,spacemove_yがなければならない定義されています

だから、spacemove_x,spacemove_yは常にそれを更新していますが、どのようにこの情報をクラスに与えることができますか?

CODE:

import pygame 
import random 

class BaseClass(pygame.sprite.Sprite): 

allsprites = pygame.sprite.Group() 
def __init__(self, x, y, width, height,spacemove_x,spacemove_y): 
    pygame.sprite.Sprite.__init__(self) 
    BaseClass.allsprites.add(self) 

    self.shipDefaultUp = pygame.image.load("textures/ships/shipDefault/shipUP.png") 
    self.shipDefaultRight = pygame.image.load("textures/ships/shipDefault/shipRIGHT.png") 
    self.shipDefaultDown = pygame.image.load("textures/ships/shipDefault/shipDOWN.png") 
    self.shipDefaultLeft = pygame.image.load("textures/ships/shipDefault/shipLEFT.png") 

    self.shipCargo1Up = pygame.image.load("textures/ships/shipCargo1/shipCargo1UP.png") 
    self.shipCargo1Right = pygame.image.load("textures/ships/shipCargo1/shipCargo1RIGHT.png") 
    self.shipCargo1Down = pygame.image.load("textures/ships/shipCargo1/shipCargo1DOWN.png") 
    self.shipCargo1Left = pygame.image.load("textures/ships/shipCargo1/shipCargo1LEFT.png") 

    self.shipCargo2Up = pygame.image.load("textures/ships/shipCargo2/shipCargo2UP.png") 
    self.shipCargo2Right = pygame.image.load("textures/ships/shipCargo2/shipCargo2RIGHT.png") 
    self.shipCargo2Down = pygame.image.load("textures/ships/shipCargo2/shipCargo2DOWN.png") 
    self.shipCargo2Left = pygame.image.load("textures/ships/shipCargo2/shipCargo2LEFT.png") 
    self.image = pygame.image.load("textures/ships/shipDefault/shipUP.png") 
    self.rect = self.image.get_rect() 
    self.rect.x = x 
    self.rect.y = y 
    self.width = width 
    self.height = height 

    self.spacemove_x = spacemove_x 
    self.spacemove_y = spacemove_y 

    #self.dirrection = random.randrange(1,5) 
    self.dirrection = 1 
    self.timer = random.randrange(10,50) 
    self.speed = random.randrange(2,10) 

    self.shiptype = 3#random.randrange(1,3) 

    #shiptypes# 
    #1 = shipDefault 
    #2 = shipCargo1 
    #3 = shipCargo2 

    self.move1 = ((1),(2),(4)) 
    self.move2 = ((1),(2),(3)) 
    self.move3 = ((2),(3),(4)) 
    self.move4 = ((1),(3),(4)) 

class spacecraftBOT(BaseClass): 
    ships = pygame.sprite.Group() 

    def __init__(self, x, y, width, height,spacemove_x,spacemove_y): 
     BaseClass.__init__(self, x, y, width, height,spacemove_x,spacemove_y) 
     spacecraftBOT.ships.add(self) 

    def motion(self): 

     #1 = UP 
     #2 = RIGHT 
     #3 = DOWN 
     #4 = LEFT 

     self.timer -=1 

     if self.dirrection == 1: ##############SHIP UP 
      self.rect.y -=self.speed 
      self.rect.y -=self.spacemove_x 

      if self.shiptype == 1: 
       self.image = self.shipDefaultUp 

      if self.shiptype == 2: 
       self.image = self.shipCargo1Up 

     if self.dirrection == 2:################SHIP RIGHT 
      self.rect.x +=self.speed 
      self.rect.x +=self.spacemove_x 
      if self.shiptype == 1: 
       self.image = self.shipDefaultRight 

      if self.shiptype == 2: 
       self.image = self.shipCargo1Right 

      if self.shiptype == 3: 
       self.image = self.shipCargo2Right 

     if self.dirrection == 3: ##############SHIP DOWN 
      self.rect.y +=self.speed 
      self.rect.y +=self.spacemove_y 

      if self.shiptype == 1: 
       self.image = self.shipDefaultDown 

      if self.shiptype == 2: 
       self.image = self.shipCargo1Down 

      if self.shiptype == 3: 
       self.image = self.shipCargo2Down 

     if self.dirrection == 4: ################SHIP LEFT 
      self.rect.x -=self.speed 
      self.rect.x -=self.spacemove_x 

      if self.shiptype == 1: 
       self.image = self.shipDefaultLeft 

      if self.shiptype == 2: 
       self.image = self.shipCargo1Left 

      if self.shiptype == 3: 
       self.image = self.shipCargo2Left 


     if self.dirrection == 5: 
      print("loitter") 

     if self.timer < 0: 
      self.dirrection = random.randrange(1,6) 
      self.timer = random.randrange(10,50) 

これは私が私のゲームに宇宙船を作成する方法である:

spacecraft1 = spacecraftBOT(500,500,100,34,spacemove_x,spacemove_y) 

それでは、どのように私は、このクラスはspacemove_x,spacemove_yを更新与えることができますか?

+0

私はPythonに慣れていませんが、 'def spacecraftBOT'に' def update_spacemove(self、x、y) 'などのメソッドを追加して呼び出すことができます'spacecraft1.update_spacemove(1,2)'の行に沿って何かを持っていますか? –

+0

しかし、これはxとyに問題があります。なぜなら、私は 'spacecraft1と言う必要があるからです。update_spacemove(1,2) '私はx、yを修正する必要はありません、そして、船はそれらのxとyに行くでしょうか? – cmdtvt

+0

コードに対応するように変数名を変更する必要があります。また、パラメータ名はクラス内の変数と同じでも異なっていなくてもかまいませんが、適切な名前を選択することをお勧めします。 –

答えて

2

このクラスを更新するにはどうすればよいですか??

はちょうどそれらが動作するはず割り当てる:

spacecraft1.spacemove_x = 100 
spacecraft1.spacemove_y = 200 

ところで、spacecraft1はクラスspacecraftBOTのインスタンスではなくクラスです。

+0

これは、分離分離の原則に準拠していますか? –

+0

これは正しく動作するようですが、それは全く単純です。 – cmdtvt

0

ドットメンバーを使用してインスタンスメンバーにアクセスします。実際には、すでに多くの回selfでこれを実行しています。 selfという名前は特別なものではありません。それはクラスインスタンスを参照する単なる変数です。同様に、spacecraft1はクラスインスタンスを参照する変数です。

spacecraft1.spacemove_x = 100 

または

spacecraft1.spacemove_x += 50 

それとも基本的にあなたが欲しいもの:これは、あなたがまったく同じ表記を使用できることを意味します。

class spacecraftBOT(BaseClass): 
    # ... all of the code you already have ... 

    def move(self, x, y): 
     self.spacemove_x = x 
     self.spacemove_y = y 

は今、あなたは、これが所定の場所に直接ジャンプすること

spaceship1.move(100, 50) 

お知らせのようなものでメソッドを呼び出すことができます。

また、あなたはmove()メソッドを定義することができます。代わりにx座標とy座標をインクリメントしたい場合は、正しいロジックを実装するだけです。 (ヒント:=の代わりに+=を使用してください。)

+0

私はもっと宇宙船が必要なときにこの 'def move()'を使う必要があると思います。更新が容易になります。 – cmdtvt

関連する問題