2017-03-19 3 views
0

저는 Python을 처음 사용하고 있고 2 개의 클래스를 가진 프로그램을 가지고 있습니다. 하나는 기본적으로 사각형이고 다른 하나는 본질적으로 원입니다.Python : Tkinter에서 보이는 모양 감지를 어떻게 감지합니까?

def draw(self): 
    self.canvas.delete("all") 
    self.rect.draw(self.canvas) 
    self.ball.draw(self.canvas) 

Ball 클래스가 위치 변수와 직경 변수를 가지고 있으며, Rect 클래스는 위치와 크기 변수가 : 나는 아래의 방법으로 TkinterCanvas를 사용하여 그리기입니다.

이 두 "모양"간의 충돌을 어떻게 감지하는지 궁금합니다. 하나는 Ball을 사각형으로 처리하고 기본 사각형 충돌을 수행하는 것이지만 정확한 방법을 알고 싶습니다.

파이썬에서 비슷한 모양의 충돌이 자바에서 발생할 수 있는지 궁금합니다. 내 자바 게임에서 나는 어떤이 개 Shape들 사이의 충돌을 감지하기 위해 다음 코드를 사용 : 파이썬에서이 간단한 해결책과 비슷한 아무것도

public boolean collisionCheck(Shape a, Shape b) { 
    Area aA = new Area(a); 
    Area aB = new Area(b); 
    aA.intersect(aB); 
    return !aA.isEmpty(); 
} 

있습니까? 그리고 파이썬에서 circle-rectangle collision을 어떻게하면 좋을까요?

내가 TkinterCanvas 개체가이 방법을 사용하여이 알아낼 관리 도움

답변

0

주셔서 감사합니다. Canvas을 사용하여 무언가를 그릴 때마다 ID가 주어집니다. 따라서 해당 ID를 어딘가에 기록하는 한 Canvas 개체에있는 find_overlapping 메서드를 사용할 수 있습니다.

내 경우에는 변수에 저장된 ID를 유지하는 사용자 지정 Platform 개체가 있다고합시다. 나는 이렇게 이렇게했다 :

이제이 ID를 사용하여 겹치는 개체가 있는지 확인할 수 있습니다.

def check_collision(self, plat, other_plat): 
    result = self.canvas.find_overlapping(plat.x, plat.y, plat.x + plat.w, plat.y + plat.h) 
    for i in result: 
     if i == other_plat.ID: 
      return True 
    return False 

result는 사각형 경계가 find_overlapping에 입력 내에 위치한 ID 년대의 튜플을 반환합니다. 튜플을 반복하여 ID 중 다른 모양과 일치하는지 확인할 수 있습니다.

이 기능은 직사각형 - 사각형 충돌 및 원 - 사각형 충돌에 유용합니다.

관련 문제