xml소켓통신시 각기 다른 플래시의 엔터프레임과 속도 맞추기
루다
xml소켓통신을 이용하여 as2.0 으로 온라인게임을 만드려고 합니다.
횡스크롤 아케이드? 방식인데 캐릭터가 좌우로 빠른 속도로 이동합니다.( 프레임당 speed 1씩 증가하여 최대 20픽셀씩. fps 24.)
코드를대충 적으면,
socket 데이터 받으면(key){
mc.rightKey = key;
}
enterframe{
if(Key.isDown(오른쪽)){
mc.rightKey = true;//오른쪽 키입력 변수 true 변경
}else{
mc.rightKey = false;
}
socket.send(mc.rightKey)//소켓에 오른쪽 키입력 변수 전달
if(rightKey){
mc.speed +1 증가(최대20까지)
}
mc._x += speed;
}
이런식으로, 키입력 변수를 매프레임 체크하여 키가 입력되었으면 입력되었다는것을 소켓에 보내어, 접속되어 있는 다른 플래시에서 보여지는 무비클립에게 키가 입력되었다는것을 전달합니다. 각 플래시의 프레임에서는 키입력 변수가 true일 경우에 스피드를 증가하여 이동하는 식입니다.
테스트를 해본결과 각 플래시에서 매 프레임 체크동안 변수가 즉시즉시 변경이 안되는지, 위치값이 다르게 이동됩니다.
예상에 소켓에 변수 보내어 변수가 변경될동안 엔터프레임이 돌아서, 몇번더 스피드가 증가하는것 같습니다.
즉,소켓통신 속도와 엔터프레임 속도가 맞을 수 있는지, 그보다 제가 생각한자체가틀린건지 궁금합니다.
위치값이나, 기타 게임에 필요한 속성정보를 모두 소켓에 보낼필요 없이, 그저 키입력값만 넘기면, 동일하게 작동할거라 생각했는데, 통신속도 탓인지, 위치가 자꾸 달라지네요.
혹시 온라인게임 구현하실때 다른 기초방식(동시 표현? 동기화?)이 있는지 가르침 부탁드립니다.
더 나아가자면, as3.0 에는 바이너리 소켓이 가능하다던데, 바이너리로 된다면 무엇이 이로운지도 도움주시기 바랍니다.
-
LO
바쁘신 와중에 신경써주신 답변 정말 감사드립니다.
-
냐하
모든 게임으 상태를 비트로 변환해서 하나의 상태가 1비트로 표현할수있게하는것이 xml로 전송하고 서버에서 해석하는시간보다 빠릅니다. 게임의 특성상 정적인것이아닌 동적이기때문에 정적인것에 알맞는 xml보다는 후자가 권장하는방식이에요.
-
샤이
보통 속도를 요구하는 경우에 서버는 udp로 구현합니다. 여러사람이 서버에 접속이되어 서로 다른 유져들의 상황을 체크해야될상황이 동싱에 일어나게되는데 어느 한유저가 네트워크가 불안정할경우 전체적으로 랙이라 불리는 기다리는 현상이 생깁니다. 동기화를 해줘야되기때문인데 udp를 쓸경우 랙이 발생한 클라이언트는 넘어갈수있기때문에 엄격한 체크가 필요하지 않은 부분은 udp를쓰고 점수같은것들과같은 민감한것들은 tcp를 씁니다.겸해서 쓸경우도 있지요. 하지만 플래
-
제철
저도 전에 실시간 온라인게임 맨들어봤는데.. as2.0으로 하시다보면 아마 좌절하실겁니다....
느린 스크립트 수행속도 때문에... -
주리
1. 첫번째 바이너리 소켓은 보안에 강합니다. 서버에서 리소스을 자원 바이너리(byteArray)로 가지고 와서 swf, mp3, jpg파일로 재구성을 해서 사용이 가능합니다.
그래서 별도로 컴서버를 사용하지 않고도 웹브라우저캐쉬에 남지 않게 할 수 있습니다. 결과적으로 바이너리 소켓 통신으로 asset(아이템)이나 결재(AS3.0 암호화 알고리즘 오픈소스 존재)를 할때 아주 유용한 기술중에 하나입니다.
2. 저도 님과 같이 비슷한 경우로 아바타 -
꽃은별
덧글 감사드립니다. 이동방향에 따른 애니메이션이나, 프레임이동, 적과 충돌여부등 캐릭터(오브젝트)의 모든속성, 정보를 모두 보내고 받는플래시에서는 엔터프레임마다 그 정보대로 오브젝트를 갱신하는 식으로 해야하나 보네요. 결국 함수로 체크한것들을 모든 상황별마다 속성값으로 저장해놓고 그걸 보내야겠네요. 혹시 다른 방법은 없을까요? 온라인 게임이 대부분 이렇게 이쪽의 데이터 값을 전부 보내면 저쪽은 받아서 보여주는 식인가요? 저는 간단하게 키입력이 이뤄진걸
-
미쿡
키값을 전달하지말고
움직일 무비클립의 위치값을 전달해보세요
받는플래시에서는 그위치값으로 이동시켜주면될것같습니다