728x90
GAME MAKER 강좌
KAYAN
◈ 접속자 목록
강좌가 거의 끝나갑니다.
이번에는 접속자를 표시해봅시다.
(▲ 접속 참여자)
먼저, 서버에서 우측 상단 화면에 클라이언트의 이름을 표시하도록 합니다.
★ obj_server_system 오브젝트 - Draw GUI 이벤트 ★ var vw, vh; vw = display_get_gui_width( ); vh = display_get_gui_height( ); draw_set_font( font0 ); draw_set_halign( fa_left ); draw_set_valign( fa_top ); var _x, _y, _list, i, _user_id, n, c, t; _x = vw-180; _y = 16; var w, h; w = 180; h = 24; c = c_green; draw_set_alpha( 0.6 ); draw_rectangle_color( _x, _y, _x+w, _y+h, c, c, c, c, 0 ); draw_set_alpha( 1 ); c = c_black; draw_text_color( _x+8, _y+2, "접속자 ( "+string( ds_list_size( global.socketlist )+1 )+" )", c, c, c, c, 1 ); _y+ = h+2; c = c_white; draw_set_alpha( 0.6 ); draw_rectangle_color( _x, _y, _x+w, _y+h, c, c, c, c, 0 ); draw_set_alpha( 1 ); c = c_blue; draw_text_color( _x+8, _y+2, "[서버]["+string( global.playername )+"]( 나 )", c, c, c, c, 1 ); _y+ = h+2; if ds_map_exists( global.player_map, "player_order" ){ _list = ds_map_find_value( global.player_map, "player_order" ); for( i = 0; i<ds_list_size( _list ); i+ = 1; ){ _user_id = ds_list_find_value( _list, i ); //플레이어 닉네임 if ds_map_exists( global.player_map, "player_"+string( _user_id ) ){ t = ds_map_find_value( global.player_map, "player_"+string( _user_id ) ); c = c_white; draw_set_alpha( 0.6 ); draw_rectangle_color( _x, _y, _x+w, _y+h, c, c, c, c, 0 ); draw_set_alpha( 1 ); c = c_black; draw_text_color( _x+8, _y+2, t, c, c, c, c, 1 ); _y+ = h+2; } } } |
서버는 클라이언트가 저장된 데이터에 없기 때문에, 서버 유저 정보(global.playername)는 바로 표시합니다.
이제 서버에서 우측 상단 화면에 클라이언트의 이름을 표시하도록 합니다.
★ obj_client_system 오브젝트 - Draw GUI 이벤트 ★ var vw, vh; vw = display_get_gui_width( ); vh = display_get_gui_height( ); draw_set_font( font0 ); draw_set_halign( fa_left ); draw_set_valign( fa_top ); var _x, _y, _list, i, _user_id, n, c, t; _x = vw-180; _y = 16; var w, h; w = 180; h = 24; user_count = 0; if ds_map_exists( global.player_map, "player_order" ){ _list = ds_map_find_value( global.player_map, "player_order" ); user_count = ds_list_size( _list ); } c = c_green; draw_set_alpha( 0.6 ); draw_rectangle_color( _x, _y, _x+w, _y+h, c, c, c, c, 0 ); draw_set_alpha( 1 ); c = c_black; draw_text_color( _x+8, _y+2, "접속자 ( "+string( user_count+1 )+" )", c, c, c, c, 1 ); _y+ = h+2; if ds_map_exists( global.player_map, "player_order" ){ c = c_white; draw_set_alpha( 0.6 ); draw_rectangle_color( _x, _y, _x+w, _y+h, c, c, c, c, 0 ); draw_set_alpha( 1 ); c = c_black; draw_text_color( _x+8, _y+2, "[서버]["+string( global.server_name )+"]", c, c, c, c, 1 ); _y+ = h+2; _list = ds_map_find_value( global.player_map, "player_order" ); for( i = 0; i<ds_list_size( _list ); i+ = 1; ){ _user_id = ds_list_find_value( _list, i ); //플레이어 닉네임 if ds_map_exists( global.player_map, "player_"+string( _user_id ) ){ t = ds_map_find_value( global.player_map, "player_"+string( _user_id ) ); c = c_white; draw_set_alpha( 0.6 ); draw_rectangle_color( _x, _y, _x+w, _y+h, c, c, c, c, 0 ); draw_set_alpha( 1 ); c = c_black; if _user_id == global.user_id{ t+ = "( 나 )"; c = c_blue; } draw_text_color( _x+8, _y+2, t, c, c, c, c, 1 ); _y+ = h+2; } } } |
서버는 클라이언트가 저장된 데이터에 없기 때문에, 서버에 처음 접속해 받아온 서버 유저 정보(global.server_name)를 바로 표시합니다.
잘 표시되는 지 확인해봅시다.
다음은 화면에 플레이어 수를 왼쪽 아래, 체력을 오른쪽 아래에 표시해봅시다.
(▲ 이미지 폰트로 숫자를 표시)
먼저, 폰트로 사용할 이미지를 추가합니다.
이미지 숫자를 표시하기 위해 게임 시작시 폰트를 추가합니다.
★ obj_start_event 오브젝트 - Game Start 이벤트 ★ var t = "0123456789%-.";//폰트 문자열 global.font_numb = font_add_sprite_ext( spr_font32_numb, t, 1, 2 ); |
이미지 폰트 추가시 이미지의 순서는 폰트 문자열과 동일 해야 합니다.
게임 실행 오브젝트(obj_game_stage)의 [Draw GUI 이벤트]에서 플레이어 수를 화면 왼쪽 아래에 표시합니다.
그리고 화면의 오른쪽 아래는 체력을 표시합니다.
★ obj_game_stage 오브젝트 - Draw GUI 이벤트 ★ draw_set_font( global.font_numb ); draw_set_halign( fa_center ); draw_set_valign( fa_top ); var vw, vh; vw = display_get_gui_width( ); vh = display_get_gui_height( ); //플레이어 수 표시 var t, c; if instance_number( obj_player_parent )>0{ t = string( instance_number( obj_player_parent ) ); c = c_white; draw_text_color( 80, vh-48, t, c, c, c, c, 1 ); } //체력 표시 t = ""; with( obj_player_parent ){ if select == 1{ t = string( HP ); }} c = c_red; draw_text_color( vw-80, vh-48, t, c, c, c, c, 1 ); |
체력 표시는 게임 플레이하는 본인 것만 표시하면 됩니다.
300x250
'GameMaker강좌[GMS2] > 네트워크강좌' 카테고리의 다른 글
[게임메이커 강좌-네트워킹][GMS2] 멀티플레이어 게임 만들기-8-네트워크 연결 지연에 따른 설정(Ping) (0) | 2024.12.25 |
---|---|
[게임메이커 강좌-네트워크][GMS2] 멀티플레이어 게임 만들기-6-플레이어의 공격 업데이트 (0) | 2024.12.25 |
[게임메이커 강좌-네트워크][GMS2] 멀티플레이어 게임 만들기-5-서버와의 동기화 (0) | 2024.12.25 |
[게임메이커 강좌-네트워크][GMS2] 멀티플레이어 게임 만들기-4-클라이언트 (0) | 2024.12.25 |
[게임메이커 강좌-네트워크][GMS2] 멀티플레이어 게임 만들기-3-서버 게임 구성 (0) | 2024.12.25 |
댓글