게임제작/소스코드

[게임메이커]3D배경에 2D이미지 구현방법

게임코드프리 2016. 9. 30. 13:38
반응형

3D 카메라 2D스프라이트 구현하기


게임메이커 스튜디오에서 3D 활용은 가능하지만, 실력적으로 퍼포먼스 있게 구현할 자신이 없었기에 어느정도 수준까지


만들 수 있을까 시험하기 위해 이 코드를 작성해 보았습니다.


준비물

  • 2D 스프라이트 이미지

  • 텍스쳐로 쓸 바닥 텍스쳐 이미지

  • 플레이어의 오브젝트 생성

  • 카메라 오브젝트 생성


설정


텍스쳐 바닥으로 쓸 이미지의 경우에만 3D로 사용할 예정이기에 텍스쳐를 불러온 뒤 이름을 

tex_grass라고 이름 지었습니다. 그 후, 텍스쳐 설정에서 Use as title setUsed for 3d에 체크


오브젝트 생성


obj_player 오브젝트를 오브젝트 폴더에서 생성합니다.

obj_camera 오브젝트를 오브젝트 폴더에서 생성합니다.

이름을 바꾸려면 아래의 코드에서 같은 이름으로 바꾸시기 바랍니다.


오브젝트 카메라 코드


// 주석으로 처리했지만 설명을 하자면, 카메라 오브젝트안에서 생성 이벤트 , 스텝이벤트, 드로우 이벤트를 만들어

각각 해당하는 코드를 넣어줍시다.



  1. /////////////////////////////////
  2. [Obj_camera]
  3. create event
  4. /////////////////////////////////
  5. d3d_start();
  6. d3d_set_perspective(true);
  7. d3d_set_hidden(true);
  8. z=400 //카메라 z좌표 높이값
  9. x_angle=0; //카메라 x좌표 회전용 변수
  10. y_angle=300; //카메라 y좌표 회전용 변수
  11. /////////////////////////////////
  12. [Obj_camera]
  13. step event
  14. /////////////////////////////////
  15. if (keyboard_check(ord('W'))){y_angle+=10}
  16. if (keyboard_check(ord('S'))){y_angle-=10}
  17. if (keyboard_check(ord('D'))){x_angle+=10}
  18. if (keyboard_check(ord('A'))){x_angle-=10}
  19. if (keyboard_check(vk_space)){x_angle=0;y_angle=300;} //카메라 초기값으로 리셋
  20. /////////////////////////////////
  21. [Obj_camera]
  22. draw event
  23. /////////////////////////////////
  24. draw_set_color(c_white)
  25. d3d_set_projection(obj_player.x+x_angle,obj_player.y+y_angle,z,obj_player.x,obj_player.y,0,0,0,1);
  26. //텍스쳐를 16 x 16 사이즈로 룸크기만큼 뿌려줌
  27. d3d_draw_floor(0,0,0,room_width,room_height,0,background_get_texture(tex_grass),16,16); 


플레이어 오브젝트 코드


플레이어는 조작을 하고 각각 해당하는 움직임마다 이미지를 교체 해주는 간단한 코드이기에 플레이어 오브젝트에 

스텝 이벤트만 코드로 작성해주면 테스트 용으로 움직임만 구현 해보았습니다.



  1. /////////////////////////////////
  2. [Obj_player]
  3. step event
  4. /////////////////////////////////
  5. if keyboard_check(vk_left)
  6. {
  7.     x-=2
  8.     sprite_index=spr_player_left
  9. }
  10. if keyboard_check(vk_right)
  11. {
  12.     x+=2
  13.     sprite_index=spr_player_right
  14. }
  15. if keyboard_check(vk_up)
  16. {
  17.     y-=2
  18.     sprite_index=spr_player_up
  19. }
  20. if keyboard_check(vk_down)
  21. {
  22.     y+=2
  23.     sprite_index=spr_player_down    
  24. }




이제 새로운 테스트 할 룸을 만들고, 플레이어 오브젝트와 카메라 오브젝트만 배치를 하면 아래와 같은 상황이 연출됩니다.





직접 구현을 해보니 문제점들이 많이 보였는데 2D 이미지라고 하더라도 각각 플랜을 써서 각도를 맞추거나


세워서 텍스쳐를 입히는 것이 좋을지 아니면 내장함수가 있었던 것 같은데 그것으로 2D 이미지 처리를 해야 하는지


배경은 따로 3D화 하는것이 좋을지에 대한 많은 생각만 들뿐 해결되지 않은 부분이 많았습니다.


반응형
facebook twitter kakaoTalk kakaostory naver band shareLink
人気ブログランキングでフォロー