Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
peterbub JLI'ler
Anmeldedatum: 24.07.2005 Beiträge: 109
Medaillen: Keine
|
Verfasst am: 11.08.2005, 17:28 Titel: Mit der Mouse im ColorKey Bereich |
|
|
Ich möchte mit der Mouse auf ein Spirte drücken, worauf ich eine Antwort (z.B. true) bekomme.
Wie kann ich es schaffen, dass der ColorKey Bereich (Rand oder Mitte) nicht mit dazu gezählt wird.
Beispiel : ich möchte ein Donut mit der Mouse abschiessen,
will aber nicht , dass der innere Bereich (Loch (Colorkeybereich)), als Treffer (true) zählt.
Ich bräuchte so eine Art Pixel - Position - Color - Information eines Spirtes
was kann ich tun |
|
Nach oben |
|
|
Maxim Senior JLI'ler
Anmeldedatum: 28.03.2004 Beiträge: 249
Medaillen: Keine
|
Verfasst am: 11.08.2005, 18:12 Titel: |
|
|
vielleicht:
wenn die Farbe des angeklickten Pixels nicht der Colorkey-Farbe entspricht, dann wird true zuzückgegeben |
|
Nach oben |
|
|
Blubb-Tec JLI'ler
Alter: 33 Anmeldedatum: 29.03.2005 Beiträge: 171 Wohnort: Düsseldorf Medaillen: Keine
|
Verfasst am: 11.08.2005, 18:17 Titel: |
|
|
oder auch umgekehrt:
wenn die Farbe des Angeklickten Pixels der ColorKey-Farbe entspricht, dann wird flase zurückgegeben _________________ www.planlos.de |
|
Nach oben |
|
|
xardias JLI Master
Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 11.08.2005, 18:20 Titel: |
|
|
das ist eigentlich nicht schwer.
du hast 2 probleme zu lösen.
1. Errechnen der mauskoordinaten auf dem bild
2. Zugriff auf die farbe an der koordinate
zu 1:
Das ist natürlich erstmal davon abhängig wie du dein koordinatensystem aufgebaut hast. normalerweise du hast die koordinaten der maus und die koordinaten der obreen rechten linken deines bildes. ziehst du von den maus koordinaten die der oberen linken ecke des bildes ab erhältst du die koordinaten der maus relativ zum bild.
zu 2:
Ich würde dir raten eine kopie des bildes im arbeitsspeicher zu speichern. sprich ein 2D array aus farbwerten. sonst gibt es sicher performance probleme, wenn du auf die bildinformationen im grafikspeicher zugreifen willst.
Also solltest du beim laden des bildes eine kopie speichern. in dieser kannst du dann die koordinaten einsetzen und erhälst die farbe des pixels.
die farbe musst du nur noch mit deinem color key vergleichen
ich hoffe ich konnte dir helfen, hab schon lange kein direct x mehr benutzt, vielleicht geht es ja einfacher |
|
Nach oben |
|
|
peterbub JLI'ler
Anmeldedatum: 24.07.2005 Beiträge: 109
Medaillen: Keine
|
Verfasst am: 11.08.2005, 18:31 Titel: |
|
|
Was wäre den das für eine DDraw oder sonstige Funktion , mit der ich Pixelinformation bekomme ? |
|
Nach oben |
|
|
Blubb-Tec JLI'ler
Alter: 33 Anmeldedatum: 29.03.2005 Beiträge: 171 Wohnort: Düsseldorf Medaillen: Keine
|
Verfasst am: 11.08.2005, 18:48 Titel: |
|
|
mhmh.... am besten mit Lock(kA) das gesamte Surface sperren, dann kannste auf jeden pixel zugreifen, und dann einfach den der mauspos. nehmen _________________ www.planlos.de |
|
Nach oben |
|
|
peterbub JLI'ler
Anmeldedatum: 24.07.2005 Beiträge: 109
Medaillen: Keine
|
Verfasst am: 11.08.2005, 18:52 Titel: |
|
|
selbst wenn ich das gesamte Surface sperren , ich auch nicht weiss wie,
gibt es denn irgendeine funktion wie GetPixelColor(posX,posY). |
|
Nach oben |
|
|
Maxim Senior JLI'ler
Anmeldedatum: 28.03.2004 Beiträge: 249
Medaillen: Keine
|
Verfasst am: 11.08.2005, 18:56 Titel: |
|
|
Ich bin jetzt nicht zu hause und kann in das Buch nicht reinschauen, aber ich glaub in dem Kapitel über Starfield solltest du was darüber finden.
Zuletzt bearbeitet von Maxim am 11.08.2005, 18:59, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Blubb-Tec JLI'ler
Alter: 33 Anmeldedatum: 29.03.2005 Beiträge: 171 Wohnort: Düsseldorf Medaillen: Keine
|
Verfasst am: 11.08.2005, 18:57 Titel: |
|
|
jau, da drin findest du was dadrüber, da in dem Kapitel(zumindestens im ersten Buch) die Pixel der Oberfläche direkt bearbeitet werden, da sollte das stehen _________________ www.planlos.de |
|
Nach oben |
|
|
peterbub JLI'ler
Anmeldedatum: 24.07.2005 Beiträge: 109
Medaillen: Keine
|
Verfasst am: 11.08.2005, 19:01 Titel: |
|
|
nun da werde ich mal gucken
|
|
Nach oben |
|
|
peterbub JLI'ler
Anmeldedatum: 24.07.2005 Beiträge: 109
Medaillen: Keine
|
Verfasst am: 11.08.2005, 21:14 Titel: |
|
|
So ich hab es ausprobiert. Kann aber nur die Farben der sichtbaren Sprite anzeigen lassen , bin ich im Bereich des Colorkeys, wird mir die Farbe des Hintergrunds angezeigt. Das bekomme ich auch mit der Mouseposition color Funktion.
was muss ich noch beachten |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 11.08.2005, 22:15 Titel: |
|
|
Du könntest vielleicht folgendes versuchen. Es ist schwierig zu erklären.
1. Du ermittelst die Mausposition relativ zum Ursprung (oben Links) des Clientbereichs deines Fensters. Oder hast du Vollbild? (Naja, das hast du ja offesnichtlich schon geschafft)
2. Du ermittelst die Position des Donut-Sprite auf der Spielfläche. (Also beispielsweise x: 5 | y: 5. Auch hier ist die obere linke Ecke der Sprite die Position)
3. Du legst vorher (beim Starten des Programms) eine Maske deiner Donut Sprite an.(am besten im systemspeicher) Die brauch nur schwarz und weiß zu enthalten.
4. Und jetzt errechnest du dir Cursorposition relativ zum Ursprung der Sprite.
An dieser Position überprüfst du die Farbe deiner Maske.
Ist der Pixel an dieser Stelle z.B. schwarz, hast du exakt den Donut angeklickt.
Zuletzt bearbeitet von KI am 11.08.2005, 22:20, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 11.08.2005, 22:17 Titel: |
|
|
Hmm, dann hast du wahrscheinlich einfach den Backbuffer(in dem du nachher die gesamte Szene hast) gesperrt und ausgelesen.
Du solltest aber wie xardias es schon beschrieben hat das Surface des Sprites selbst sperren, das du auf Kollision testen willst.
Damit das in einigermaßen erträglicher Geschwindigkeit abläuft, solltest du zu jedem Sprite, das du später testen willst, eine Kopie im Systemspeicher anlegen(siehe xardias ). Am einfachsten geht das allerdings, wenn du beim erstellen des Surfaces statt ...VIDEOMEMORY einfach ...SYSTEMMEMORY angibst(ich weiß gerade nicht den genauen Wortlaut der Konstanten).
Wenn du das so mit der Starfieldmethode machst, dann sollte er dir trotz Colorkey die richtige Farbe zurückgeben _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
peterbub JLI'ler
Anmeldedatum: 24.07.2005 Beiträge: 109
Medaillen: Keine
|
Verfasst am: 12.08.2005, 00:12 Titel: |
|
|
also ich habe jetzt die surface de einzelnen Sprites gesperrt. Krieg aber am rand oder in der mitte immernoch die hintergrund farbe.
diese surface information scheint sich nur auf den sichtbaren bereich zu beschränken.
2.mögl. eine Copy machen :
wo soll ich die den darstellen lassen ?
soll die immer mit dem orginal mit geführt werden ?
wenn sichtbar dann auch mit colorkey ? |
|
Nach oben |
|
|
OLiver Super JLI'ler
Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 12.08.2005, 07:40 Titel: |
|
|
Zitat: |
wo soll ich die den darstellen lassen ?
soll die immer mit dem orginal mit geführt werden ?
wenn sichtbar dann auch mit colorkey ?
|
Nein, die soll nie dargestellt werden, sondern nur zur Kollisionserkennung dienen. _________________ http://www.sieder25.org/ (Siedler 2 - Remake) |
|
Nach oben |
|
|
|