![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 2.05.2011 Ostrzeżenie: (30%) ![]() ![]() |
Mam system walki w grze, niestety wygląda to fatalnie. Gdy u gracza uruchamia się walka, od razu wyświetla wszystkie kolejki (ile on zadał dmg mobowi i ile mob mu), dzieje się to od razu.
Nie chodzi mi np. o to by co określoną liczbę sekund ładował się element z pętli odpowiadający za obliczenie wywieranego dmg na mobie - Tylko po prostu żeby co określony czas np. pół sekundy wyświetlało się echo z informacją o tym ile gracz zadał DMG mobowi / mob graczowi. W skrócie: ma to działać po stronie przeglądarki, nie serwera... samo odkrywanie "echo"... dla samego efektu. Edit, mam już to: Kod <script type="text/javascript"> function display() { document.getElementById("graczatak").innerHTML += ""; } window.setInterval(display, 1000);</script> </script> i potem w kodzie mma tak: echo "<div id='graczatak'> + Zadałeś przeciwnikowi <font color = '#7ffa88'>".$dam."</i></font> DMG<br></div>"; niestety nie pojawia mi się te echo w odstępach czasowych mimo poprawności kodu, dodam że te echo jest w pętli while, to może być tego przyczyną ? cały kod wygląda tak: Kod $bonus = floor($oGracz['atak'] / $potwor['obrona']); if($bonus > 2) $bonus = 2; $oGracz['omin'] = floor($oGracz['omin'] * $bonus); $oGracz['omax'] = floor($oGracz['omax'] * $bonus); $bonus = floor($potwor['atak'] / $oGracz['obrona']); if($bonus > 2) $bonus = 2; $potwor['omin'] = floor($potwor['omin'] * $bonus); $potwor['omax'] = floor($potwor['omax'] * $bonus); while(($oGracz['zycie'] > 0) && ($potwor['zycie'] > 0)){ $czas ++; $dam =rand($oGracz['omin'],$oGracz['omax']) - $potwor['absorpcja']; if($dam < 1) $dam = 1; $potwor['zycie'] -=$dam; echo "<div id='graczatak'> + Zadałeś przeciwnikowi <font color = '#7ffa88'>".$dam."</i></font> DMG<br></div>"; co w tym powoduje to że nie wyświetla danego echa w odstępach czasowych ? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 248 Pomógł: 31 Dołączył: 14.12.2010 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
java scrip działa po stronie przeglądarki i dostaje już w całości dokument, od razu cały, ten kod co napisałeś nie może działać poprawnie.Chyba że ja się mylę. Użyj do tego Ajaxa powinno działać wtedy poprawnie
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
zmień sobie widok wyświetlanych walk albo na regularną strukturę gdzie mógłbyś to wyciąć z HTML'a i wstawiać po kolei - od razu wyświetlone w html'u jakby ktoś miał js wyłączony... albo dane komunikaty walki po stronie php wyświetl np. do tablicy i potem przez js to wstaw... - taki przykład na bazie Twojego kodzika:
// edit - tu nie jest potrzebny żaden ajax skoro wyniki mogą być od razu a chodzi tylko o kosmetykę wyświetlanych wyników... ogólnie w php trzymajmy się tego, że nie można "streamować" odpowiedzi - jest na to sposób ale szkoda o nim wspominać choćby ze względu na strukturę html - chyba, że zdarzenia onload i inne wywołują się zaraz po zamknięciu taga html a nie po zamknięciu połączenia - tego nie sprawdzałem - gdyż w tym wypadku można by fajnie streamować wywoływanie funkcji w js dodając za samym html'em Ten post edytował zegarek84 30.05.2011, 23:06:09 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 2.05.2011 Ostrzeżenie: (30%) ![]() ![]() |
to co mi dałeś w ogóle nie działa, jest identyczne jak tamto co napisałem na początku
Cytat zmień sobie widok wyświetlanych walk albo na regularną strukturę gdzie mógłbyś to wyciąć z HTML'a i wstawiać po kolei jak mam to zrobić? przecież wyświetlanie obrażeń - mob/gracz działa na bazie tej pętli (do póki ta pętla zostanie spełniona): Cytat while(($oGracz['zycie'] > 0) && ($potwor['zycie'] > 0)){ i chodzi mi właśnie by w pewnym sensie wyświetlanie tego co jest w tej pętli opóźniać a nie osobnych elementów, nie wyobrażam sobie tego Ten post edytował nakers2 31.05.2011, 10:59:46 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
w php tego nie opóźnisz a kod który Ci podałem sprawdzałem w firebugu i działa ;]
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 2.05.2011 Ostrzeżenie: (30%) ![]() ![]() |
no działa, wyświetla mi co chwile te 3 komunikaty (IMG:style_emoticons/default/sleep.gif)
co do tego tworzenia tablic i pobierania, jak mam to zrobić w oparciu o tą pętle? Cytat while(($oGracz['zycie'] > 0) && ($potwor['zycie'] > 0)){
Ten post edytował nakers2 31.05.2011, 11:19:06 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
nie powinno się danych wyświetlać od razu a powinno się buforować jeśli jest potrzeba do zmiennych lub tablic i potem wyświetlić... ale jeśli już od razu chcesz to wyświetlić to mniej więcej do js tak [można i tak jak robisz do html'a ale nie znam struktury kontenera obejmującego]:
Kod <?php $aKomunikat = array(); while(($oGracz['zycie'] > 0) && ($potwor['zycie'] > 0)){ $czas ++; $dam =rand($oGracz['omin'],$oGracz['omax']) - $potwor['absorpcja']; if($dam < 1) $dam = 1; $potwor['zycie'] -=$dam; $aKomunikat[] = "\"<div id='graczatak'> + Zadałeś przeciwnikowi <font color = '#7ffa88'>".$dam."</i></font> DMG<br></div>\""; // DODAŁEM JESZCZE CYCTATY W WYŚWIETLANYM KODZIE HTML - ZOSTANIE WYŚWIETLONY PÓŹNIEJ } ?> <script type="text/javascript"> var aKomunikaty = [ <?php echo implode(',', $aKomunikat);?> ]; var i = 0, iL = aKomunikaty.length; var interval; function display() { if(i<iL) document.getElementById("graczatak").innerHTML += aKomunikaty[i++]; if(i===iL) clearInterval(interval); }; interval = setInterval(display, 1000); </script> |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 2.05.2011 Ostrzeżenie: (30%) ![]() ![]() |
dzięki ci wielkie, za kod...
Cytat nie powinno się danych wyświetlać od razu a powinno się buforować jeśli jest potrzeba do zmiennych lub tablic i potem wyświetlić... ale jeśli już od razu chcesz to wyświetlić to mniej więcej do js tak [można i tak jak robisz do html'a ale nie znam struktury kontenera obejmującego]: ...ale możesz jaśniej, mało co z tego zrozumiałem. Moja wiedza o php kończy się na sesjach, if, while, for, operatorach no i sql/mysql / js. Dlatego też z tablicami nie wiedziałem do tej pory o co chodzi, nigdy ich nie używałem. Ten post edytował nakers2 31.05.2011, 16:34:36 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
odnośnie odpowiedniej struktury html - co było by lepsze jeśli gra nie wymaga JavaScript do grywalności a sam JS jest tylko dodatkiem, to miałem na myśli np. coś w stylu:
Kod <div id="komunikaty"> <div class="komunikat">jakiś tam pierwszy komunikat</div> <div class="komunikat">drugi komunikat</div> <div class="komunikat">....</div> <div class="komunikat">enty komunikat</div> </div> <script type="text/javascript"> // przy odpowiedniej strukturze html'a nic nie musiałeś zmieniać tylko wystarczyło dołożyć skrypt js ukrywający wszystko a potem po kolei pokazujący komunikaty /* i tutaj skrypt chowający wszystkie komunikaty przed użytkownikiem (wszystkie div'y o klasie "komunikat") po czym wyświetlający po kolei te div'y - wystarczyło im na początku ustawić w js np. visibility:hidden; [dokładnie nazwy nie jestem pewien;p] po czym po kolei przełączać na visible; */ </script> zaletą tego rozwiązania jest to, iż gdy użytkownik miałby wyłączony JavaScript to też zobaczy komunikaty z walki tyle, że od razu... |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 2.05.2011 Ostrzeżenie: (30%) ![]() ![]() |
aha rozumiem, ale chce by było jednak obowiązkowe JS bo i tak gracz nawet jak by miał wyłączone JS dostanie potem raport o tym że odbyła się walka z częściowym jej opisem
aha i ten kod nie działa jednak, nic się nie pojawia Kod <?php $aKomunikat = array(); while(($oGracz['zycie'] > 0) && ($potwor['zycie'] > 0)){ $czas ++; $dam =rand($oGracz['omin'],$oGracz['omax']) - $potwor['absorpcja']; if($dam < 1) $dam = 1; $potwor['zycie'] -=$dam; $aKomunikat[] = "\"<div id='graczatak'> + Zadałeś przeciwnikowi <font color = '#7ffa88'>".$dam."</i></font> DMG<br></div>\""; // DODAŁEM JESZCZE CYCTATY W WYŚWIETLANYM KODZIE HTML - ZOSTANIE WYŚWIETLONY PÓŹNIEJ } ?> <script type="text/javascript"> var aKomunikaty = [ <?php echo implode(',', $aKomunikat);?> ]; var i = 0, iL = aKomunikaty.length; var interval; function display() { if(i<iL) document.getElementById("graczatak").innerHTML += aKomunikaty[i++]; if(i===iL) clearInterval(interval); }; interval = setInterval(display, 1000); </script> to w ogóle nie działa Ten post edytował nakers2 31.05.2011, 17:48:13 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
podaj kod html generowany wraz z objętym kontenerem na komunikaty i komunikaty - w wolnym czasie napiszę Ci skrypt js i napiszę gdzie dokładnie go wkleić - nie bardzo wiem gdzie wyświetla Ci się poprzedni skrypt i gdzie to wszystko wkleja - ale rozwiązanie jest takie jak podałem - chyba, że div o id "graczatak" jest tym do którego jest wklejany kod javascript - ten kod powinien znaleźć się na zewnątrz niżej niż ten div z id "graczatak"...
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 2.05.2011 Ostrzeżenie: (30%) ![]() ![]() |
html wygenerowało to (czyli błąd):
<script type="text/javascript"> var aKomunikaty = [ <br /> <b>Warning</b>: implode() [<a href='http://www.php.net/manual/pl/function.implode'>function.implode</a>]: Invalid arguments passed in <b>D:\Programowanie\PHP\gra\walka.php</b> on line <b>4</b><br /> ]; var i = 0, iL = aKomunikaty.length; var interval; function display() { if(i<iL) document.getElementById("graczatak").innerHTML += aKomunikaty[i++]; if(i===iL) clearInterval(interval); }; interval = setInterval(display, 1000); </script> Ten post edytował nakers2 1.06.2011, 14:06:40 |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
po pierwsze to czemu dopiero w czwartej linii - a gdzie reszta kodu php??... po drugie miałeś podać strukturę kodu wygenerowanego html jak wyświetlałeś wszystkie te komunikaty na raz - ja Ci teraz miałem dać gotowy skrypt javascript i napisać w którym miejscu go zamieścić - ale chyba jednak się nie dogadamy...
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 2.05.2011 Ostrzeżenie: (30%) ![]() ![]() |
Cytat po pierwsze to czemu dopiero w czwartej linii - a gdzie reszta kodu php??... po drugie miałeś podać strukturę kodu wygenerowanego html jak wyświetlałeś wszystkie te komunikaty na raz po prostu, nie mogę poskładać tego w logiczną całość ^^ |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 04:51 |