Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

09.02.2012, 13:21

C++ SFML Isometrische Tile Engine

Hey liebe Community!
Wie ihr schon in der Überschrift lesen könnt, versuche ich eine einfache IsoTileEngine zu programmieren.
Nun bin ich beim Mausklick hängengeblieben, also wenn ich ein Tile anklicke, soll es sich gelb umranden bzw die Farbe ändern.
Wie soll das funktionieren? Man müsste ja quasi so ein Diamantartiges Rect erstellen und überprüfen, ob sich die Maus darauf befindet.
Nur mir fehlt das Wissen dazu, da ich bisher nur mit "Boxen" gearbeitet habe, die "waagerecht" waren/lagen.

Das Problem liegt ja eigentlich daran, dass der Sprite an sich eine Box ist, aber wenn man Colorkey setzt, er als Isometrischer Tile gerendert wird.
Jedoch möchte ich, dass der Tile sich nur dann verfärbt, wenn ich auf ihn klicke und nicht drüber(Beispiel).

lg. denniro
Only God can judge me.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

2

09.02.2012, 13:33

Ich habe einen einfachen Ansatz per Google-Suche gefunden.

1. Finde das Rectangle-Sprite heraus, auf welchem sich der MouseCursor befindet.
2. Berechne die Position relativ zu diesem SpriteRectangle. Also wenn du die obere linke Ecke der Box hast, dann ist deine Koordinate 0;0
3. Du hast folgendes Array in der Größe deines Tiles in Pixel, was du aus einem Bild liest:


(Link)
(Quelle: GameDev.NET)


Dieses Array könnte einfach ein char-Array sein mit den Zahlen 1 = Rot, 2 = Gelb, 3 = Blau, 4 = Grün, 0 = Weiß´.

4. Berechne aus deinem Array den Charwert durch die Position aus Schritt 2. Je nach Farbe kannst du dann das getroffene Tile bestimmen:

Weiß (0): das aktuelle
Rot (1): das vom aktuellen oben links
.. usw.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

09.02.2012, 13:59

Die imo bessere Lösung wär, es einfach auszurechnen. Vor einiger Zeit gabs hier mal eine Diskussion dazu.

4

09.02.2012, 13:59

Erstmal danke für die Antwort, bin jedoch zu dumm dafür -.-
Only God can judge me.

Sc4v

Alter Hase

Beiträge: 376

Beruf: Student

  • Private Nachricht senden

5

09.02.2012, 14:54

Die Möglichkeit von TrommlBomml sollte nicht alzu schwer zu implementieren sein, woran haperts denn?

6

09.02.2012, 18:36

Die Möglichkeit von TrommlBomml sollte nicht alzu schwer zu implementieren sein, woran haperts denn?a
Also den 3ten und 4ten Schritt verstehe ich nicht wirklich xD
Only God can judge me.

7

10.02.2012, 21:17

Was genau verstehst du daran denn bitte nicht? So kann man schlecht helfen...

MfG
Check

8

11.02.2012, 12:30

Ich weiß nicht wie er das meint, also soll ich jetzt ein CharArray machen

char array[32][32];

so und danach jedem einzelnen einen Wert zu weisen:

array[0][0] = 1; //(Rot)
array[31][31] = 4; //(Blau)
....

Meinte er das so? ;D
Only God can judge me.

Sc4v

Alter Hase

Beiträge: 376

Beruf: Student

  • Private Nachricht senden

9

11.02.2012, 13:40

Meinte er das so? ;D
Ich denke mal ja

10

11.02.2012, 14:08

Meinte er das so? ;D
Ich denke mal ja

Achso ja dann, ich dachte zuerst es wäre bisschen umständlich.
Only God can judge me.

Werbeanzeige