Drawimagerect und Kollision!
Übersicht

InfectedBetreff: Drawimagerect und Kollision! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo! Momentan arbeite ich an einem kleinen 2D Worldeditor, und habe nun folgendes Problem:
Am anfang lasse ich den benutzer einige Texturen laden, die dann fein säuberlich angeordnet als Thumbnails im Menü links dargestellt werden, klappt mit Drawimagerect soweit sogut, aber sobald ich da ne collision einbaue (maus->texturthumbnail) klappt gar nix mehr, es sieht so aus als würde da die tatsächliche größe der Textur als collisionsmodel herhalten, und nicht das verkleinerte thumbnail... ich hoffe ihr versteht.. gibt es da irgendeine lösung? oder n workaround oder sowas? |
||
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Muss unbedingt eine Kollisionsprüfung stattfinden? Könntest du auch eine Lösung akzeptieren, bei der einfach die Mauskoordinaten verglichen werden? Für mich klingt dein Problem aber doch schon sehr danach, als ob ein einfaches If-Konstrukt helfen könnte...
mfG Holzchopf |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja, in der tat.
Der workarround ist wie folgt: 1) Du kennst die positionen beim zeichnen. Am einfachsten wäre hier ein 2d array, welches die bilder oder objekte der "tiles" hält. Hier noch beim zeichnen ein DrawImageRect( daten[x,y], x* sizeX, y*sizeY .... ) und e voila ![]() 2) Du nutzt die art des Zeichnens auch beim "überprüfen" - bei Tiles gehe ich davon aus, das diese gleichgroß sind. Vorgehensweise: Mausposition auf die entsprechende Zone berechnen (falls du ein Origin oder sonstwas setzt! diese werte addieren oder subtrahieren, bin mir grade unsicher) tileX = tmpMouseX / sizeX tileY = tmpMouseY / Sizey -> Prüfe, ob das tile existent ist, oder ob es "innerhalb des arrays" liegt (tileX = -1 zb würde einen fehler verursachen) passt alles, also liegt es im rahmen, dann kannst du mit data[tileX,tileY] an dein Ziel kommen. ![]() ::::::::::::::::::::::::::::::: Es liegt nun an dir: - Die koordinatenberechnung deiner Tiles rauszufinden - Die formel umstellen - Mauspositionen damit verrechnen - An die gespeicherten daten kommen^^ Gleichzusetzen mit deiner collision-geschichte. Vorteile: 1) Es ist schneller (ne simple division hat dann doch weniger rechenleistung wie ne kollisionsberechnung *vermut*) 2) Es .. ehm ja. Ist machbar! ![]() 3) Lerneffekt ![]() |
||
Infected |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hey, danke erstmal für die Antwort. Momentan versteh ich nur Bahnhof, bin aber auch total fertig ![]() ![]() Hier mal n bild, es geht um die texturselektion links http://www.hyperionspath.de/screen.png |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Oh oh, okay. Meine blöde art, nicht erklären zu können, hat wieder zugeschlagen.
Gut, dann würde ich dich gerne auffordern, einen Teil Code zu posten, wie du die Texturen auf den bildschirm bringst. Folgendes wüerde ich vermuten: - Du verwendest SetOrigin irgendwo vorher - bitte umbedingt mit kopieren - Alternativ hast du einen Grund-offset von Oben Links (0,0) zur ersten kante von der ersten Textur - auch dann auf jedenfall mit hier rein. Du hast momentan 7 tiles - alle sind viereckig. Heißt im umkehrschluß: Man kann die "formel" zum zeichnen umstellen, um eine Koordinate wieder zu einem Tile zuzurück zu führen, was am ende eine simple abfrage ist. Die zweite möglichkeit ist, das du die daten der Tiles in einer TList oder einem array hast: BlitzMax: [AUSKLAPPEN] Local mX:Int = MouseX() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group