2012-09-18 5 views
1

나는 간단한 Pong 게임을 쓰고있다. 내 패들과 내 Ball 객체 모두 DynamicObj (기본 간단한 오일러 통합을 사용하여 위치를 틱하는 update 메서드가있는 부모 클래스)에서 상속 받기를 원합니다. 문제는 패들 객체의 위치가 rect에 저장되므로 (x pos가 rect.x를 사용하여 액세스 됨) Ball 객체의 위치가 x 및 y 값에 저장된다는 것입니다. 자신의 직위를 똑같이 똑같이 상속받을 수있는 방법이 있습니까?부모가 자식과 다른 변수 이름을 가지고있다

class DynamicObj: 
    def __init__(self, vel): 
     self.vel = vel 
    def update(self, delta): 
     self.x += self.vel.x * delta 
     self.y += self.vel.y * delta 

class Ball(DynamicObj): 
    def __init__(self, x, y, radius, vel): 
     self.x = x 
     self.y = y 
     self.radius = radius 
     self.vel = vel 

class Paddle(DynamicObj): 
    def __init__(self, rect, vel): 
     self.rect = rect 
     self.vel = vel 
     #what I want is to create self.x and self.y that respectively point to the same place as self.rect.x and self.rect.y 

나는 아마도 property으로 이렇게 생각했다 :

는 여기에 지금까지 무슨이다.

답변

1

을이 "대답을"떠날거야 읽기 전용 필드 x. 세터를 원하면 @x.setter을 사용하십시오.

그러나 나는 여전히 당신의 생각이 잘못되었다고 생각합니다. 일반적으로 직사각형을 사용하는 것이 훨씬 쉽습니다. 파이 게임을 사용하는 경우, 파이 게임에는 여러 가지 방법이 있습니다. 그냥 모든 개체를 직사각형 클래스를 기반으로 만들거나 통합 된 방법으로 인터페이스 (즉, 인터페이스)를 만들면됩니다.

왜 지구상에 둥근 구형에 사각형을 사용해야합니까? 거친 충돌 감지가 직사각형으로 싸기 때문입니다 (다시 pygame의 효율적인 방법 참조). 두 개의 직사각형이 충돌하지 않으면 그 경계에있는 복잡한 모양의 객체도 확실히 그렇지 않습니다. 경계 사각형이 충돌하는 경우에만 잠재적으로 더 비싼 정확한 충돌 검사를 실행해야합니다.

+0

귀하의 조언에 감사드립니다. 그렇습니다. 한 가지 해결책은 직사각형을 사용하여 볼의 위치를 ​​나타내는 것이지만 불필요한 오버 헤드가 추가 될 것이라고 생각했습니다. 또한 원에 대한 충돌 감지는 직사각형보다 저렴합니다 (4면을 비교할 필요없이 두 원 사이의 거리를 비교할 수 있음). – Lanaru

0

이 뜻입니까?

class Paddle(DynamicObj): 
def __init__(self, rect, vel): 
    self.x = rect.x 
    self.y = rect.y 
    self.vel = vel 

편집 :

class Paddle(DynamicObj): 
    # ... 
    @property 
    def x(self): 
     return self.rect.x 

이제 패들가있을 것이다 : 좋아, 그래서 나는 properties 도움이 될 예 ... 해명으로

+0

'rect'객체의 다른 매개 변수가 여전히 필요하기 때문에 아니요. – Lanaru

+0

사람들은 일반적으로 다중 상속을 싫어합니다.하지만이 경우가 그렇습니다 : Paddle은 DynamicObject와 rect입니다. – lvella