PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [PHP] GET-Variable wird nicht sofort überschrieben


Blade II
2009-10-19, 13:28:43
Moin,

Ich möchte eine Spielfigur per GET-Variable laufen lassen. Das Problem besteht darin, dass wenn die Figur ihre Richtung wechselt sie dennoch einen Schritt in die alte Richtung geht.
Code:
if(!empty($_GET['move'])) {
switch($_GET['move']) {
case 'up':
if($userdata_arr['posY'] > 1) player_move($db, 'up');
break;
case 'left':
if($userdata_arr['posX'] > 1) player_move($db, 'left');
break;
case 'right':
if($userdata_arr['posX'] < $map_width) player_move($db, 'right');
break;
case 'down':
if($userdata_arr['posY'] < $map_height) player_move($db, 'down');
break;
default:
$error = 'Ung&uuml;ltige Richtung';
break;
}
}

Ich schätze mal, dass beim Laden der Seite die neue GET-Variable noch nicht initialisiert wurde und stattdessen weiterhin die alte verwendet wird.

Packe ich das ganze falsch an oder gibt es da irgend einen Trick?

MfG,
Blade II

darph
2009-10-19, 14:30:40
Get wird über die URL codiert. Da gibt es keine alte oder neue. Im Kontext deines Scripts sollte das also eine Konstante sein.


Ich vermute eher, daß das Problem dort liegt, wo deine URL, deren Link der Spieler anklickt, falsch erzeugt wird.

Blade II
2009-10-19, 14:44:45
Die URL wird wie folgt erzeugt: <a href="?move=left"> --> index.php?move=left

Wenn ich einen Schritt gehe, dann die Konstante aus der URL entferne, Seite neu lade und wieder einen Schritt gehe dann reagiert das Script auch erst beim 2. Klick.

Hier mal der ganze Plunder, vllt. hilft es ja: http://nopaste.info/a415dba6bb.html

Kinman
2009-10-19, 15:01:05
Wie darph schon gesagt hat: Bei $_GET gibt es keinen alten Stand...

Kann es sein, dass du nach der Änderung der Position du diese nicht erneut ausliest? Ansonsten wäre es vllt. hilfreich, wenn du das ganze zum Testen mal wo hochladen kannst.

lg Kinman

wry
2009-10-19, 15:01:58
Hab gerade folgendes Script getestet und es funktioniert hier ohne Probleme. Aufgerufen mittels: "http://localhost/test.php5?move=direction"
Edit: hab nur echo-Ausgaben reineditiert, damit ich sehe obs geht.

Ich denke das Problem liegt bei den If-Abfragen in den cases. Die sind wohl nicht immer True und somit macht das Ganze dann gar nix bei dir?!


<?php

if(!empty($_GET['move'])) {
switch($_GET['move']) {
case 'up':
if($userdata_arr['posY'] > 1) player_move($db, 'up');
echo "up";
break;
case 'left':
if($userdata_arr['posX'] > 1) player_move($db, 'left');
echo "left";
break;
case 'right':
if($userdata_arr['posX'] < $map_width) player_move($db, 'right');
echo "right";
break;
case 'down':
if($userdata_arr['posY'] < $map_height) player_move($db, 'down');
echo "down";
break;
default:
$error = 'Ung&uuml;ltige Richtung';
echo "??!";
break;
}
}
?>

Blade II
2009-10-19, 15:32:55
Mmh, die if-Abfragen scheinen nicht schuld zu sein. Echo-Befehle werden immer sofort passend ausgegeben.

Script: http://demon-coding.net/fa_a8sudjasd/

Quellcodes: index.php (http://demon-coding.net/fa_a8sudjasd/index.txt), functions.php (http://demon-coding.net/fa_a8sudjasd/functions.txt), index.tpl (Smarty Template) (http://demon-coding.net/fa_a8sudjasd/templates/index.txt)

Es hat auch nichts gebracht die X- & Y-Position des Spielers bei Aufruf der player_move-Funktion sofort zu übergeben.

Kinman
2009-10-19, 15:48:21
Rufe $userdata_arr = get_userdata($db); vor den Template Zuweisungsfunktionen nochmals auf, dann sollts klappen.


$userdata_arr = get_userdata($db);

$direction = $_GET['move'];
if(!empty($direction)) {
switch($direction) {
case 'up':
if($userdata_arr['posY'] > 1) player_move($db, 'up');
break;
case 'left':
if($userdata_arr['posX'] > 1) player_move($db, 'left');
break;
case 'right':
if($userdata_arr['posX'] < $map_width) player_move($db, 'right');
break;
case 'down':
if($userdata_arr['posY'] < $map_height) player_move($db, 'down');
break;
default:
$error = 'Ung&uuml;ltige Richtung';
break;
}
}

//==================================
$userdata_arr = get_userdata($db);
//==================================

$smarty->assign('user', $userdata_arr['user']);
$smarty->assign('level', $userdata_arr['level']);
$smarty->assign('attack', $userdata_arr['attack']);
$smarty->assign('defense', $userdata_arr['defense']);
$smarty->assign('lifepoints', $userdata_arr['lifepoints']);
$smarty->assign('experience', $userdata_arr['experience']);
$smarty->assign('gold', $userdata_arr['gold']);
$smarty->assign('posX', $userdata_arr['posX']);
$smarty->assign('posY', $userdata_arr['posY']);

Blade II
2009-10-19, 15:50:45
Göttlich, 10 000 Dank! :massa: