• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

공이 가만히 있습니다

21.03.07 17:50 작성 조회수 192

0

잘 따라 한 것 같은데...

공이 가만히 있습니다.

전체코드(뒤죽박죽 올렸을 수도 있습니다ㅎㅎ ctrl + 마우스 스크롤 올려서 보세요.):

답변 1

답변을 작성해보세요.

1

uki020226님의 프로필

uki020226

2021.03.10

이미지 말고, 그냥 코드를 긁어서 복사해서 올렸으면 더 편할텐데,.. 굳이 이미지까지 찍어주시는 수고를 하시네요 ㅎㅎㅎ;;;
소스 코드면 제가 직접 넣어서 어디가 오류가 나는지도볼 수 있고, 직접해보면서 뭐가 문제인지도 볼 수 있을텐데 하하..ㅣ;;

이러면 하나하나 다 읽어봐야 해서, 
이런식이면 본인이 잘못 작성한걸 찾는게 훨씬 빠를거예요. 
작성하신건 본인이고, 어디서 실수 했는지를 찾는건, 본인이 더 잘 하겟죠...

라곤 했지만 찾긴 했는데요. 저도 다른걸 강의 하다 와서, 이런경우 많이 받는데, 되도록,,, 원문을 올려줘요. 원문을 올려도 본인이 실수한걸, 다른 사람이 찾는것보다 본인이 더 찾기 쉬우니까요.. ( 그리고 이렇게 원문으로 올려야 ctrl +F 같은걸로 찾기도 훨씬 편하니까요. ) 어느부분이 잘못됬을거란 예상을 하고, 그부분을 찾은담에, 그부분을 볼 수 있죠. 그냥 이런 이미지면, ... 하나하나 다 읽어봐야해요. 

    # 공 위치 정의
    for ball_idx, ball_val in enumerate(balls):
        ball_pos_x = ball_val["pos_x"]
        ball_pos_y = ball_val["pos_y"]
        ball_img_idx = ball_val["img_idx"]

        ball_size = ball_images[ball_img_idx].get_rect().size
        ball_width = ball_size[0]
        ball_hight = ball_size[1]

        if ball_pos_x < 0 or ball_pos_x > screen_width - ball_width:
            ball_val["to_x"] = ball_val["to_x"]*(-1)

        if ball_pos_y >= screen_hight - stage_hight - ball_hight:
            ball_val["to_y"] = ball_val["init_spd_y"]
        else:
            ball_val["to_y"] += 0.5

        ball_val["pos_x"] += ball_val["to_x"]
        ball_val["pos_y"] += ball_val["to_y"]

이부분 제가 작성한 코드랑 자성하신 코드랑 뭐가 다른지 한번 보세요. 

제가 작성한 코드에는 탭이 어떻게 처리 되어 있는지 확인 해보세요. 

설명을 좀 드리자면, 작성하신 코드는

if 가로 벽에 닿았다면, 
  ~~~ 처리를 하고, 
     if 그 중에서, 세로벽에 닿았다면, 
           ~~~~ 처리를 하고, 
             ball_val["pos_x"] += ball_val["to_x"]

        ball_val["pos_y"] += ball_val["to_y"]

즉 이동을 해라, 라는 문장이라서, 

가로 벽에 닿은후 세로 벽에 닿은 후에만 움직입니다.  따라서, 가로 벽 세로벽 닿기 전인 공은 움직일 수 없죠..;. 매우 특수한 상황 그러니까 가로 벽과 세로 가 움직여야 만 움직이는 특이한 공이예요 한마디로 못움직이죠.. 
탭이 굉장히 중요해요. 

반면에 제가 작성한 코드는 

if 가로벽에 닿았다면, 
~~~~ 처리를 하고, 

그게 아니라, 세로벽에 닿았다면, 
~~~ 처리를 하고, 
또,  뭐가 됬든 

        ball_val["pos_x"] += ball_val["to_x"]
        ball_val["pos_y"] += ball_val["to_y"]

이동을 해라. 가 되서, 

가로가 먼저 닿든 세로가 먼저 닿든 혹은 아무것도 안닿든. 그냥 움직이죠 if 문 아래에 넣을게 아니라 바깥에 넣어야 하는 겁니다.