Poruszanie postaci.

0

Witam, mam problem ze skryptem poruszanie się, skrypt bardzo szybko się porusza i nie reaguje na blokade przejscia. Postać płynie po mapie, kolega podpowiedział ze jest problem z obliczaniem pozycji lecz ja na nic nie wpadłem. Chcę aby płynnie wszystko się poruszało.

plik map-div.php

<?php
require_once('../php/mysql-connect.php');

$ajax_txt = "";

$poz_x = ((-$postac['x']) * 32) + 240;
$poz_y = ((-$postac['y']) * 32) + 240;

$ajax_txt .= "".$poz_x."px ".$poz_y."px";

echo $ajax_txt;
exit;
?>

js+ajax

<script>
function wyslij(strona,ox,oy,kierunek){
 	$.ajax({
		type: "POST",
		url: "js/idz.php",
		data:"move="+strona,
		success: function(msg){
			if(msg){
					$('#oMap').css("background-image","url("+msg+")");
          setTimeout("map_poz(x+="+ox+",y+="+oy+");animation(0,"+kierunek+");",100);
          setTimeout("map_poz(x+="+ox+",y+="+oy+");animation(1,"+kierunek+");",200);
          setTimeout("map_poz(x+="+ox+",y+="+oy+");animation(2,"+kierunek+");",300);
          setTimeout("map_poz(x+="+ox+",y+="+oy+");animation(3,"+kierunek+");",400);
          setTimeout("animation(0,"+kierunek+");",500);
				 }

		}
	});

function map_poz(x,y){
$("#oMap").css("background-position", x+"px "+y+"px");
}

function animation(klatka,kierunek){
$("#oHero").css("background-position",(-klatka*32)+"px "+(-kierunek*48)+"px");
}
</script>

 

idz.php

 
<?php
require_once('../php/mysql-connect.php');
require_once('../php/load-data.php');

if($postac['zycie'] > 0){
$teleport = mysql_fetch_array(mysql_query("select * from mapa_przenies where mapa = ".$postac['mapa']." and x = ".$postac['x']." and y = ".$postac['y']." limit 1"));

if($_POST['move'] == 'lewo'){
$npcblock = mysql_fetch_array(mysql_query("select * from npc where mapa = ".$postac['mapa']." and x = ".($postac['x'] - 1)." and y = ".$postac['y']." limit 1"));
$npcblock2 = mysql_fetch_array(mysql_query("select * from mob where mapa = ".$postac['mapa']." and x = ".($postac['x'] - 1)." and y = ".$postac['y']." and respawn <= ".$czas_ogolny." limit 1"));
$blokada = mysql_fetch_array(mysql_query("select * from blokadaprzejscia where mapa = ".$postac['mapa']." and x = ".($postac['x'] - 1)." and y = ".$postac['y']." limit 1"));
if((empty($npcblock)) && (empty($blokada)) && (empty($npcblock2))){
mysql_query("update postac set x = x - 1 where id = ".$postac['id']." and x > 0 limit 1");
$postac['x'] -= 1;
echo $mapa['obrazek'];
exit;
}
}

if($_POST['move'] == 'prawo'){
$npcblock = mysql_fetch_array(mysql_query("select * from npc where mapa = ".$postac['mapa']." and x = ".($postac['x'] + 1)." and y = ".$postac['y']." limit 1"));
$npcblock2 = mysql_fetch_array(mysql_query("select * from mob where mapa = ".$postac['mapa']." and x = ".($postac['x'] + 1)." and y = ".$postac['y']." and respawn <= ".$czas_ogolny." limit 1"));
$blokada = mysql_fetch_array(mysql_query("select * from blokadaprzejscia where mapa = ".$postac['mapa']." and x = ".($postac['x'] + 1)." and y = ".$postac['y']." limit 1"));
if((empty($npcblock)) && (empty($blokada)) && (empty($npcblock2))){
mysql_query("update postac set x = x + 1 where id = ".$postac['id']." and x < ".$mapa['maks_x']." limit 1");
$postac['x'] += 1;
echo $mapa['obrazek'];
exit;
}
}

if($_POST['move'] == 'gora'){
$npcblock = mysql_fetch_array(mysql_query("select * from npc where mapa = ".$postac['mapa']." and x = ".$postac['x']." and y = ".($postac['y'] - 1)." limit 1"));
$npcblock2 = mysql_fetch_array(mysql_query("select * from mob where mapa = ".$postac['mapa']." and x = ".$postac['x']." and y = ".($postac['y'] - 1)." and respawn <= ".$czas_ogolny." limit 1"));
$blokada = mysql_fetch_array(mysql_query("select * from blokadaprzejscia where mapa = ".$postac['mapa']." and x = ".$postac['x']." and y = ".($postac['y'] - 1)." limit 1"));
if((empty($npcblock)) && (empty($blokada)) && (empty($npcblock2))){
mysql_query("update postac set y = y - 1 where id = ".$postac['id']." and y > 0 limit 1");
$postac['y'] -= 1;
echo $mapa['obrazek'];
exit;
}
}

if($_POST['move'] == 'dol'){
$npcblock = mysql_fetch_array(mysql_query("select * from npc where mapa = ".$postac['mapa']." and x = ".$postac['x']." and y = ".($postac['y'] + 1)." limit 1"));
$npcblock2 = mysql_fetch_array(mysql_query("select * from mob where mapa = ".$postac['mapa']." and x = ".$postac['x']." and y = ".($postac['y'] + 1)." and respawn <= ".$czas_ogolny." limit 1"));
$blokada = mysql_fetch_array(mysql_query("select * from blokadaprzejscia where mapa = ".$postac['mapa']." and x = ".$postac['x']." and y = ".($postac['y'] + 1)." limit 1"));
if((empty($npcblock)) && (empty($blokada)) && (empty($npcblock2))){
mysql_query("update postac set y = y + 1 where id = ".$postac['id']." and y < ".$mapa['maks_y']." limit 1");
$postac['y'] += 1;
echo $mapa['obrazek'];
exit;
}
}
}
echo false;
exit;
?>


0
  1. http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php
  2. Formatowanie tragiczne
  3. Słaby sposób na pisanie gry. No chyba, że sam sobie będziesz biegał po mapie to może ujdzie.
0

Czyli nie podpowiesz w czym bład? Chociaż powiedz w czym problem dlaczego poruszanie nie działa jak powinno?

0

Gra w php? O takim pomyśle jeszcze nie słyszałem.

0

Ehh, proszę jedynie o pomoc w rozwiązaniu mojego problemu a nie o opinie na tamat pisaniu gry w danym języku.

0

idz.php - niepotrzebnie piszesz metodą kopiuj/wklej. Zamiast duplikować kod odpowiedzialny za MySQL możesz wydzielić osobną funkcję do obsługi bazy (tak, tak. PHP jako nowoczesny język także oferuje możliwość tworzenia własnych funkcji. Nawet ma słowo kluczowe function przeznaczone do tego celu. Zadziwiające, prawda? ;).

Tak zduplikowany kod aż prosi się o bugi, więc nie dziwne, że coś nie działa.

setTimeout("map_poz(x+="+ox+",y+="+oy+");animation(1,"+kierunek+");",200);

Hmm... I tu to samo. Czemu nie tworzysz funkcji tylko robisz na około tworząc stringa? W JavaScript także jest słowo kluczowe function, którego nawet użyłeś wcześniej, więc wiesz o jego istnieniu...

Aha, no i setTimeout też duplikujesz metodą kopiuj wklej w mega dziwaczny sposób. Może od tego postać płynie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1