2012-12-29 6 views
0

저는 기본적인 게임 프로그래밍을 배우고 있으며이 글 머리 기호 클래스는 물론 게임의 글 머리 기호 클래스입니다. Python. 목록에서 객체를 제거하는 방법

bulletGroup = [i for i in bulletGroup if i.buly < screen.get_height()] 
for shot in bulletGroup: 
    shot.buly -=3 

내가 그래서 코드의 tfirst 라인이 작동하지 않을 수 있도록 이미 내리스트의 길이를 줄일하지 않는 것 abpve/그러나 frpm 화면을 통과 한 총알을 제거 할 수 무슨 짓 . 그렇다면 객체 목록을 확인한 다음 내가 원하는 모든 객체를 제거합니다.

편집 : 예 객체가 인쇄되어 목록에있는 지, 그리고 화면 높이보다 확실히 작은 지 확인했습니다. 아직 그들은 여전히 ​​목록의 일부입니까? 이 모든 것은 게임 루프 btw에 있습니다. 따라서 모든 틱은 그 가출 총알에 대해 bulletGroup을 갱신해야합니다.

+1

상태가 좋지 않은 개체가 있습니까? 몇 가지 예제 데이터를 줄 수 있습니까? – GWW

답변

4

3을 매번 buly에서 뺀 것이므로 screen.get_height()보다 클 수 없습니다.

bulletGroup = [i for i in bulletGroup if i.buly >= 0] 
for shot in bulletGroup: 
    shot.buly -= 3 

또는 대신 buly 3을 추가합니다 :

게임이 어떻게 작동하는지에 따라 다음 중 하나 buly0에 대해 비교한다 또한 그것이 유지하는 것이 좋습니다 사실을 발견

bulletGroup = [i for i in bulletGroup if i.buly < screen.get_height()] 
for shot in bulletGroup: 
    shot.buly += 3 
+0

OH CRAP! 나는 어리석게도 내 두뇌가 눈치 채지 못했지만 데카르트와 게임에서 사용 된 좌표계에 혼란 스러웠다. -_- 이제 작동합니다. 그걸위한 탁신! 나는 그 중 몇 분을 보냈다는 것을 믿을 수 없다. –

+1

다행) 이제 한가지 기억해야 할 점은 첫 번째 옵션 (if i.buly> = --bulletHeight와 같은 것)을 수행하는 경우 글 머리 높이를 고려해야한다는 것입니다. – grc

+0

나는 그것을 생각했지만, 직경 5px 정도의 원형이기 때문에별로 중요하지 않다고 생각했다. :) –

0

글 머리 기호를 목록에 추가 한 다음 제거하는 것이 아니라 고정 된 풀입니다. 대신, 모든 프레임을 업데이트하거나 가져 오지 않도록 플래그를 지정하고 더 필요할 때 새로운 프레임을 활성화하십시오.

글 머리 기호 개체를 끊임없이 만들고 파괴하면 가비지 수집이 많아지고 게임에서 주기적으로 일시 중지가 발생하게됩니다. 고정 된 개체 풀을 사용하면 문제가되지 않으므로 실수로 너무 많은 것을 실수로 생성하는 것을 방지 할 수 있습니다.

관련 문제