Hallo alle,
Ich komme mit den Domelementen auf keinen grünen Zweig.
Bei untenstehenden Code hatte mir damals Sven Mintel geholfen. Es ist aber unabdingbar das ich ihn erweitere. Leider macht mir allein schon die Syntax mit den Trinitäts-Operator ? : zu schaffen.
1. Ist es möglich das in If-else Operatoren umzuschreiben?
2. Wie schaffe ich es $node->setAttribute('title'
weitere Werte hinzuzufügen zb. Ressource oder Bewegungen?
2.1 $data enthält nur die Werte aus Der DB für die Positionen der User. für Frage 2 benötige ich aber eine 2.e DB-Abfrage aus einer andren Tabelle. Wie kann ich dies kombinieren?
3. Ist es möglich alle andren "leeren" Felder auch als Link mit Position einzubinden?
Das ganze nochmal komplett (funktioniert bereits):
Ich bin mir im klaren darüber das sich möglicherweisse nicht jeder mit diesem Thema auskennt. Auch ist vieleicht eine der Fragen im Moment nicht lösbar. Dennoch würde ich mich freuen wenn ihr eine Idee dazu habt und sie mir postet. auch wenn es nur eine Frage betrifft. Normalerweisse versuche ich meine Probleme mit Hilfe von Google meist selbst zu lösen aber hier blicke ich echt kaum durch und benötige wirklich Hilfe.
Vielen Dank fürs lesen
Ich komme mit den Domelementen auf keinen grünen Zweig.
Bei untenstehenden Code hatte mir damals Sven Mintel geholfen. Es ist aber unabdingbar das ich ihn erweitere. Leider macht mir allein schon die Syntax mit den Trinitäts-Operator ? : zu schaffen.
1. Ist es möglich das in If-else Operatoren umzuschreiben?
2. Wie schaffe ich es $node->setAttribute('title'
weitere Werte hinzuzufügen zb. Ressource oder Bewegungen?
2.1 $data enthält nur die Werte aus Der DB für die Positionen der User. für Frage 2 benötige ich aber eine 2.e DB-Abfrage aus einer andren Tabelle. Wie kann ich dies kombinieren?
3. Ist es möglich alle andren "leeren" Felder auch als Link mit Position einzubinden?
PHP:
//das Grid, hardcodiert aus einer externen Datei
include 'grid.tpl';
//Einfügen der Daten ins XML
$doc=new DomDocument();
$doc->loadXML($grid);
foreach($data as $item)
{
$node=$doc->
documentElement->
getElementsByTagName('div')->item(($item['PosX']-$NearestKoordsX1))->
getElementsByTagName('a')->item(($item['PosY']-$NearestKoordsY1));
$node->setAttribute('title',
($item['Username']==$Username)
?''.'Bunker von '.$item['Username'].': '.$item['PosX'].'/'.$item['PosY']
:''.'Bunker von '.$item['Username'].': '.$item['PosX'].'/'.$item['PosY']);
$node->setAttribute('href',
'main.php?section=erkunden');
$node->setAttribute('class',
($item['Username']==$Username)
?'me'
:'enemy');
}
Das ganze nochmal komplett (funktioniert bereits):
PHP:
<div id="content-pic">
<?php include 'templates/Ress.tpl'; ?>
</div>
<div id=content>
<div id=mappic>
<?php
error_reporting(E_ALL);
//// Variablen und Grundwerte zur Karten und Positionsberechnung
$SlicepointX = $UserMapX*10-277; // Auschnittspunkt X
$SlicepointY = $UserMapY*10-220; // Auschnittspunkt Y
$NearestKoordsX1 = $UserMapX-21;
$NearestKoordsX2 = $UserMapX+22;
$NearestKoordsY1 = $UserMapY-27; // Erfassung aller Spieler des Kartenausschnittes
$NearestKoordsY2 = $UserMapY+27;
//// Abweichende Berechnung bei Kartenrandnähe ansonsten wird Spieler immer auf der Mitte angezeigt
if ($UserMapX<22) {
$SlicepointX = 0;
$NearestKoordsX1 = 0;
$NearestKoordsX2 = 44;
}
if ($UserMapX>178) {
$SlicepointX = 1457;
$NearestKoordsX2 = 201;
$NearestKoordsX1 = 156;
}
if ($UserMapY<28) {
$SlicepointY = 0;
$NearestKoordsY1 = 0;
$NearestKoordsY2 = 56;
}
if ($UserMapY>172) {
$SlicepointY = 1568;
$NearestKoordsY2 = 201;
$NearestKoordsY1 = 145;
}
//// Alle Spieler aus Datenbank lesen und in ein Array speichern.
{
$sql = "SELECT
PosX,
PosY,
MoveX,
MoveY,
Username
FROM
User
WHERE
PosX >=$NearestKoordsX1 AND PosX < $NearestKoordsX2 AND
PosY >=$NearestKoordsY1 AND PosY < $NearestKoordsY2";
$result = $db->query($sql);
if (!$result) {
die ('Etwas stimmte mit dem Query nicht: '.$db->error);
}
while ($row = $result->fetch_assoc()) {
$data[] = $row;
}
}
//// Aus der 2000*2000Px Karte den passenden KartenAusschnitt erstellen (Tiling)
$dir= "img/Map/$SlicepointX";
if (file_exists($dir) == false) {
mkdir("img/Map/$SlicepointX", 0700); // Verzeichniss erstellen wenn noch nie erstellt
}
$file= "img/Map/$SlicepointX/$SlicepointY.jpeg";
if (file_exists($file) == false) { // Prüfen ob Auschnitt (Tile) schon existiert
//// Kartenausschnitt ohne Spielerposition
$size = array(543,432); // Breite und Höhe des Auschnitts
$point = array($SlicepointX,$SlicepointY); // Koordinaten, ab wo kopiert werden soll (erst X, dann Y).
$image = imagecreatefromjpeg("img/MAP1.jpg") ; // Original einlesen
$new = imagecreatetruecolor($size[0],$size[1]); // Neues Bild leer erstellen
imagecopyresampled($new, $image, 0,0, $point[0],$point[1],
$size[0],$size[1], $size[0],$size[1]); // Ausschnitt rüberkopieren
imageJPEG($new,"img/Map/$SlicepointX/$SlicepointY.jpeg",100); // Bild speichern
}
//das Grid, hardcodiert aus einer externen Datei
include 'grid.tpl';
//Einfügen der Daten ins XML
$doc=new DomDocument();
$doc->loadXML($grid);
foreach($data as $item)
{
$node=$doc->
documentElement->
getElementsByTagName('div')->item(($item['PosX']-$NearestKoordsX1))->
getElementsByTagName('a')->item(($item['PosY']-$NearestKoordsY1));
$node->setAttribute('title',
($item['Username']==$Username)
?''.'Bunker von '.$item['Username'].': '.$item['PosX'].'/'.$item['PosY']
/* :(($item['Username']==$Username) AND ($item['PosX'] != $item['MoveX']) AND ($item['PosY'] != $item['MoveY']))
?''.$item['Username'].': '.$item['MoveX'].'/'.$item['MoveY'] */
:''.'Bunker von '.$item['Username'].': '.$item['PosX'].'/'.$item['PosY']);
$node->setAttribute('href',
'main.php?section=erkunden');
$node->setAttribute('class',
($item['Username']==$Username)
?'me'
/* :(($item['Username']==$Username) AND ($item['PosX'] != $item['MoveX']) AND ($item['PosY'] != $item['MoveY']))
?'move' */
:'enemy');
}
$sql = "SELECT
Username,
PosX,
PosY,
MoveX,
MoveY
FROM
User
WHERE
Session =('".session_id()."')";
$result = $db->query($sql);
if (!$result) {
die ('Etwas stimmte mit dem Query nicht: '.$db->error);
}
while ($row = $result->fetch_assoc()) {
$data2[] = $row;
}
foreach($data2 as $item)
{
$node=$doc->
documentElement->
getElementsByTagName('div')->item(($item['MoveX']-$NearestKoordsX1))->
getElementsByTagName('a')->item(($item['MoveY']-$NearestKoordsY1));
$node->setAttribute('title', (($item['Username']==$Username) AND ($item['PosX'] != $item['MoveX']) OR ($item['PosY'] != $item['MoveY']))
?''.$item['Username'].': '.$item['MoveX'].'/'.$item['MoveY']
:''.'Bunker von '.$item['Username'].': '.$item['PosX'].'/'.$item['PosY']);
$node->setAttribute('href',
'main.php?section=erkunden');
$node->setAttribute('class', (($item['Username']==$Username) AND ($item['PosX'] != $item['MoveX']) OR ($item['PosY'] != $item['MoveY']))
?'move'
:'me');
}
?>
<style type="text/css">
/*CSS fürs Grid*/
#grid{
background: url(img/Map/<? echo "$SlicepointX/$SlicepointY"; ?>.jpeg) no-repeat;
width:543px;
height:432px;
}
#grid div{
width:543px;
height:10px;
}
#grid div a{
display:block;
width:10px;
height:10px;
float:left;
}
/*CSS zur markierung der Felder, hier könnte man statt Farben Sprites einsetzen*/
#grid a.me{
background: url(img/list12x12-dot18.gif) no-repeat;
}
#grid a.move{
background: url(img/pin25.gif) no-repeat;
}
#grid a.enemy{
background: url(img/list12x12-dot19.gif) no-repeat;
}
</style>
<?php
//Ausgabe des Grids
echo $doc->saveHTML();
?>
</div>
</div>
<div id="upper-pic">
</div>
<div id="uppercontent">
<h2><?php
echo "Benötigte Dauer: ".(microtime(true)-$start)." Sekunden.<br>";
echo "Die Map wird zur Zeit optimiert.";
//var_dump($row["Username"]);
//unset($_SESSION['Positionen']);
//echo "unset ";
?></h2>
</div>
Ich bin mir im klaren darüber das sich möglicherweisse nicht jeder mit diesem Thema auskennt. Auch ist vieleicht eine der Fragen im Moment nicht lösbar. Dennoch würde ich mich freuen wenn ihr eine Idee dazu habt und sie mir postet. auch wenn es nur eine Frage betrifft. Normalerweisse versuche ich meine Probleme mit Hilfe von Google meist selbst zu lösen aber hier blicke ich echt kaum durch und benötige wirklich Hilfe.
Vielen Dank fürs lesen
