Wenn es genau 45° sind kann ich dir vllt dienlich sein. Hab sowas mal vor einiger Zeit gemacht. War ne nette kleine Klassensammlung zum Thema isometrische Karten.
Da ja in irrlicht alles rechteckig ist was man mit draw2D zeichnen kann wirst du auch sicherlich einfach rechteckige bilder nehmen, bei denen die Textur an sich verzerrt ist. Somit wirst du wenn du irgendwo auf den Screen klickst immer 2 Bilder anwählen. Bei dem einen wirst du auf das Bild an sich klicken und bei anderen auf den transparenten Teil, der dann unsichtbar ist. Nun musst du rausfinden auf welchen der beiden Tiles du auf die transparente Stelle und bei welchen auf die sichtbare Stelle geklickt hast.
Wenn du statische Auflösungen benutzt kannst du folgendes machen. Zeichne dir eine Maske, die die gleiche Auflösung wie eine Kachel hat. Z.B.:
Dann legst du die Maska dahin, wo die beiden verdächtigen Tiles sind und fragst ab welche Farbe das Pixel unter der genannten Mouseposition hat. (Natürlich zeichnest du die Maske nicht mit!) Und kannst somit herausfinden bei welcher Kachel dann tatsächlich auf die sichtbare Stelle geklickt wurde und somit die selektierte sein muss.
Als Codebasis habe ich damals das genommen:
Code:
int correctionX, correctionY;
SColor color;
int k, l;
IImage* image = _device->getVideoDriver()->createImageFromFile("mask.png");
//unsere Kacheln liegen in einer quadratischen Karte der Größe sizeOfMyMap vor
for(unsigned int x = 0; x < sizeOfMyMap; x ++)
{
for(unsigned int y = 0; y < sizeOfMyMap; y ++)
{
//Nun ermitteln wir den Offset, damit die Position auch in der Maske liegt
//Die Maske hat eine Auflösung von 64x32 und das Fenster eine Größe von screenWidth*TileWidth
//Weiterhin geht das Beispiel davon aus, dass die Karte zentriert gezeichnet wurde!
correctionX = (screenWidth/2 - 64/2) - y * 64/2 + x *64/2;
correctionY = (screenHeight/2 - 32/2*sizeOfMyMap) + y*32/2 + x*32/2;
image->lock();
color = image->getPixel(mouseX - correctionX, mouseY - correctionY);
image->unlock();
}
}
Nun kannst du color auswerten. Falls sie schwarz (SColor(255,0,0,0)) ist, dann ist es ganu unser gesuchtes Tile ansonsten eben nicht
Das Beispiel hinkt hier und da und entspricht nicht ganz dem wie ich es dir oben gennant habe. Es geht viel mehr alle Möglichkeiten durch. Dass das ineffizient ist brauche ich glaube nicht zu sagen. Ich werde mich die Tage mal etwas damit beschäftigen und hier
http://www.rpdev.net/home/node/39 etwas dazu ergänzen.
Aber ich hoffe ich konnte dich in die richtige Richtung stoßen :>
mfg heck
_________________
Irrlicht - From Noob To Pro A Guideline
--
Sonstige Projekte, Blog :
http://www.rpdev.net