Warsztat - Programowanie gier

Lipiec 30, 2010, 17:34:45 *
Witamy, Gość. Zaloguj się, lub zarejestruj proszę.

Zaloguj się podając nazwę użytkownika, hasło i długość sesji
Aktualności: Warsztat, Regulamin forum, #warsztat, Wiki, FAQ, NoPaste, Mapa
 
   Strona główna   Pomoc Szukaj Zaloguj się Rejestracja  
Strony: [1]
  Drukuj  
Autor Wątek: Odczyt Pozycji gracza realtime;/  (Przeczytany 1566 razy)
kostrzewix
Newbie
*

wiadomości: 2


Zobacz profil
« : Grudzień 28, 2008, 04:44:04 »

Witam!

Mam pytanie odnosnie odczytu pozycji gracza w realtime? Z bazy danych SQL bedzie strasznie mulilo a przy wiekszej liczbie graczy nawet nie wspominam. Nie wiem jak z odczytem z pliku txt? Z czego skorzytać? Prosze o pomoc i oczywiscie jeśli ktoś ma linki do stron z problemem bede wdzieczny.

Pozdrawiam Marcin
Zapisane
maro
Full Member
***

wiadomości: 100



Zobacz profil
« Odpowiedz #1 : Grudzień 28, 2008, 14:41:01 »

Zwykle korzysta się właśnie z baz danych, jeśli chodzi o aplikacje webowe. Ale tutaj niech się wypowiedzą spece od baz danych.
Ewentualnie można pomyśleć o własnym serwerze, i takie parametry przechowywać w RAMie.
Zapisane
Aod
Gość
« Odpowiedz #2 : Grudzień 28, 2008, 14:49:49 »

A co dokładnie uważasz za "realtime"?
Zapisane
kostrzewix
Newbie
*

wiadomości: 2


Zobacz profil
« Odpowiedz #3 : Grudzień 28, 2008, 15:28:32 »

Chodzi mi o to zeby odczyt pozycji gacza byl powiedzmy co 100milisekund (by gracz A mogl na biezaco sledzic dzialania innych graczy), ale odczyt z bazy co tak krotki czas jest malo racjonalne. Postanowilem sam cos temu zaradzic i
Mam taki kod:

Kod:

<script>
if (window.XMLHttpRequest) {
dana = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
dana = new ActiveXObject("Microsoft.XMLHTTP");
}
var a = 100;
function pobierz1(zrodlo, cel) {

if (dana) {
dana.open("GET", zrodlo);
var cel = document.getElementById(cel);
dana.onreadystatechange = function() {
if (dana.readyState == 4) {


parametry = dana.responseText.split("|");
cel.innerHTML = parametry['2'];



icds = setInterval("mk()", a);

}
}
dana.send(null);
}
}


setInterval('pobierz1("pobierz.php", "div")', 5000);

function mk() {
 var ludek = document.getElementById(id).style;
  var oldy = parseInt(ludek.top);
  var oldx = parseInt(ludek.left);

  var endy = parametry['1'];
  var endx = parametry['0'];

if (oldy - endy < 0) { ry = 1;}
if (oldy - endy > 0) { ry = -1;}
if (oldy - endy == 0) { ry = 0;}

if (oldx - endx < 0) { rx = 1;}
if (oldx - endx > 0) { rx = -1;}
if (oldx - endx == 0) { rx = 0;}


if (oldy != endy && oldx != endx ) {
a=(endy-oldy)/(endx-oldx);
b=oldy-(a*oldx);

y=(a*oldx + ry) + b;
if (oldy < endy) {
x=(oldy + rx - b)/a;
}
if (oldy > endy) {
x=(oldy - rx - b)/a;
}
if (x - oldx > 2) {
x = oldx + 2}
if (x - oldx < -2) {
x = oldx - 2}
var newleft = x;
var newtop = y;
ludek.top = newtop + "px";
ludek.left = newleft +"px";
}
if (oldy == endy) {
if (oldx - endx < 0) {
ludek.left = oldx + 2 + "px";
}
if (oldx - endx > 0) {
ludek.left = oldx - 2 + "px";
}
}
if (oldx == endx) {
if (oldy - endy < 0) {
ludek.top = oldy + 2 + "px";
}
if (oldy - endy > 0) {
ludek.top = oldy - 2 + "px";
}
}
}
</script>
<div id=div name="gangsta" style="position:absolute; top: 10px; left: 10px; visibility:visible;"></div>


Troszke wyjasnie pwyzszy kod. Ajax pobiera wspolrzedne gracza z pliku pobierz.php co 5 sekund. nastepnie funkcja mk() tworzy prosta (tor ruchu) po ktorej gracz sie przesuwa. W ten sposob omijam pobieranie wspolrzednych z bazy danych co np. 100milisekund.

I teraz kolejne pytanie funkcja liczy tor ruchu dla jednego gracza. Jak powinna wygladac funkcja ktora bedzie przetwarzala wspolrzedne dla kilku graczy.Huh

Pozdrawiam Marcin
Zapisane
Yarek
Sr. Member
****

wiadomości: 273


Zobacz profil
« Odpowiedz #4 : Grudzień 28, 2008, 15:49:25 »

Jak ma to by typowa gra przeglądarkowa (wyświetlanie grafiki w HTML + js + ajax) z dynamiką quaka to zapomnij. Lepiej napisz klienta w javie i zrób normalne połączenie po TCPIP
Zapisane
Khaine
Full Member
***

wiadomości: 205


Zobacz profil
« Odpowiedz #5 : Grudzień 29, 2008, 16:50:37 »

jesli chcesz takie cos robic co 100ms dla n graczy to zarzniesz server jesli nie jest on naprawde mocny. Jesli chesz taka gre robic to na pewno masz server z sql'em i server aplikacji (apache, java), bo jesli wszystko stoi na jednej maszynie to zycze powodzenia. Po trzecie, json by sie do tego lepiej nadawal (szybszy w parsowaniu i lzejszy).
Generalnie my (w robocie) robimy tak, ze odpytujemy server o podstawowe dane: czy uzytkownik jest zalogowany (jedno zapytanie) i czy ma nowe wiadomosci (drugie) i dzieje sie to co minute. Mamy 3 servery della dwuprocesorowe, po 2-4gb ramu itd (ogolnie nie takie zle) i boimy sie, czy to nie bedzie za ciezkie Tongue Wszystko zalezy od ilosci uzytkownikow. W grze bedzie ich duzo.

Trzymanie danych w ramie bardzo by odciazylo server, ale stwarza to problem taki, ze server moze pasc i wszystko szlag trafi. Trzeba by co jakis czas zapisywac dane do bazy.
Zapisane
jaboja
Jr. Member
**

wiadomości: 94



Zobacz profil WWW
« Odpowiedz #6 : Luty 15, 2009, 18:46:18 »

A dlaczego nie zrobisz sobie po prostu komety, tak żeby serwer informował użytkownika o zmianie?
Zapisane
Si-Coder
Newbie
*

wiadomości: 28



Zobacz profil
« Odpowiedz #7 : Kwiecień 11, 2009, 21:48:31 »

Takie rzeczy robi się poprzez memcache. 100 ms to dosyć mało, ale da radę sobie z tym poradzić. Trzeba by zrobić jakiś moduł zarządzający wydobywaniem danych z memcache ( jakaś prosta kolejka FIFO ).   
Zapisane
barry
Newbie
*

wiadomości: 1


Zobacz profil
« Odpowiedz #8 : Czerwiec 05, 2009, 13:32:21 »

Pierwszy post, więc witam grono z forum.

Też mnie interesuje kwestia odczytu "real-time". Chodzi o real-time w jakimś rozsądnym stopniu jednak generalnie wrażenie płynności ma być zachowane.
Dobrym przykładem jest gra Dark Orbit (www.DarkOrbit.wp.pl). Czy ktoś z Was ma może pomysł jak to właśnie w tej grze zostało zrealizowane?
Zapisane
Strony: [1]
  Drukuj  
 
Skocz do:  

Hosting: Polska Strefa - Ogłoszenia
Powered by SMF 1.1.7 | SMF © 2006, Simple Machines LLC