Una forma de crear disparos en red muy sencilla consiste en dejarlos creados de origen y fuera de pantalla.. o fuera de scroll mejor dicho.. entonces desde el proceso de nuestro jugador:
- //--------------------------UPDATE NET POSITION---------------------------------------
- players[net.player_id].x_ = x; // mi coordenada X..
- players[net.player_id].y_ = y; // mi coordenada Y..
- players[net.player_id].graph_ = net_graph_; // mi gráfico..
- players[net.player_id].flags_ = net_flags_; // mi flags..
- if(exists(id_my_shot)) // Si existe mi disparo..
- players[net.player_id].x_shot_ = id_my_shot.x; // envio su posición..
- players[net.player_id].y_shot_ = id_my_shot.y; // envio su posición..
- players[net.player_id].angle_shot_ = id_my_shot.angle; // envio su angle..
- players[net.player_id].graph_shot_ = id_my_shot.graph; // envio su gráfico..
- else // si no existe mi disparo..
- players[net.player_id].x_shot_ = -100; // mando a las replicas de mi disparo en los otros clientes fuera del scroll..
- players[net.player_id].y_shot_ = -100; // mando a las replicas de mi disparo en los otros clientes fuera del scroll..
- end
- //------------------------------------------------------------------------------------
En todos los clientes por el simple hecho de estar conectados 3 clientes por ejemplo, existirán sus disparos y estarán fuera del scroll de juego, entonces si en un cliente se dispara.. se envian los datos del disparo a la estructura de red.. y si el disparo no existe, se le pasan unas coordenadas fuera de scroll.. así nos ahorramos toda la movida de crear y destruir entidades.
Un truco interesante vaya..
Por si a alguien le pica la curiosidad, la estructura de red que estoy usando es esta:
- typedef
- type playerdata
- byte item_list_[31]; // lista de 32 bits que apunta a los objetos en red..
- byte event_;
- byte bit_;
- int x_; // cord. X del jugador..
- int y_; // cord. Y del jugador..
- byte flags_;
- byte graph_; // gráfico del jugador..
- byte healt_;
- byte mana_;
- byte in_combat_;
- int x_shot_; // cord. X del disparo del jugador..
- int y_shot_; // cord. Y del disparo del jugador..
- int angle_shot_;
- byte graph_shot_; // gráfico del disparo..
- int x_bomb;
- int y_bomb;
- byte collision_obj_list_; // Para informar de colisiones..
- byte collision_shot_; // Para informar de que me ha alcanzado un disparo..
- end