Klick auf bestimmtes Objekt
-
vielleicht sind die farbenkanaele vertauscht. stimmt das vielleicht mit blau ueberein?
-
Ne, das ist 0, egal auf welche Farbe ich klicke, auch wenn ich Grün oder Blau ausgeben lasse ist das auch 0...
-
hast du es dir im debugger angesehen? geben die funktionen keine fehler? sind alle variablen bis auf r,g,b valide?
-
Also r, g und b sind zu jeder Zeit im Code 0,
Wenn du mit valide meinst, dass die anderen variablen nie "null" sind, dann sind sie valide
-
und die funktionen? klappen die alle? z.B. SDL_LockSurface ?
Grundsaetzlich, wenn mal etwas nicht funktioniert, bau validierungen an fuer jede moegliche fehlerquelle. Ich weiss nicht, was SDL als return parameter gibt, aber ich meine etwas in der art:
SDL_RESULT Result = SDL_LockSurface(...); assert(Result==SDL_OK);
-
SDL_Result gibt's zwar nicht, aber ist es das, was du meinst:
SDL_Surface* img;
if (!(img = SDL_GetWindowSurface(window))) {
std::cout << "SDL_Surface wrong\n";
}
SDL_PixelFormat* fmt;
if (!(fmt = img->format)) {
std::cout << "Format worng\n";
}if (!(SDL_LockSurface(img))) {
std::cout << "Locking Surface wrong\n";
}
Uint32 pixels;
Uint8 r, g, b, a;
if (!(pixels = getpixel32(img, xm, ym))) {
std::cout << "getpixels wrong\n";
}SDL_GetRGBA(pixels, fmt, &r, &g, &b, &a);
SDL_UnlockSurface(img);//std::cout << "\n\n RGB: " << (int)r << ", " << (int)g << ", "<< (int)b << endl;
printf("%08lx", r);
std::cout << "\t";
printf("%08lx", g);
std::cout << "\t";
printf("%08lx", b);
std::cout << "\t";
printf("%08lx", a);
std::cout << "\t";
std::cout << endl;[/code]Wenn ja: SDL_LockSurface() und die getpixel32() Funktion funktionieren nicht
Ich hab vom debuggen noch n paar Screens gemacht, scheinbar bekommen r, g, b und a einen Wert (siehehttp://www.mediaupload.de/uploads/0/thumbs/a8fe676698e02f17a2b16f77fa5157dd.png) Wenn ich das richtig interpretiert habe
Bei der Ausgabe hat interessanterweise nur noch a den Wert 255, alle anderen sind 0 (siehe http://www.mediaupload.de/uploads/0/thumbs/61ab7fa04d4aae8c1f0ab33599b39ad5.png)
Und beim letzten Bild hab ich noch was für das Surface angezeigt wird, ich kann damit leider nicht viel anfangen, ist das so richtig? http://www.mediaupload.de/uploads/0/thumbs/c96a69c61348cfc484a80d57167898d5.png
-
SDL_LockSurface returns 0, or -1 if the surface couldn't be locked.
Also, wenn die Funktion erfolgreich ist bekommst du 0 zurück. Damit wird durch ein “!“ Zeichen davor das ganze zu “true“ und du bekommst deine Fehler Ausgabe.
Edit: was für Werte stehen denn in xm und ym? Sind die plausible?
-
in xm und ym stehen die Werte der Stelle, an der ich geklickt hab. Also auch wirklich plausible
Dann schein LockSurface ja doch zu funktionieren...
Würde es vielleicht helfen, wenn ich das Projekt als .Zip auf die Dropbox oder so lad und euch den Link gebe, damit ihr das mal selbst ausprobieren könnt? Weil ihr habt davon deutlich mehr Ahnung und so zieht sich das ewig, wenn ihr mir immer eine Frage stellt und ich die beantworte... Außerdem erkennt ihr den Fehler vielleicht sofort, wenn ihr das Projekt vor euch habt
Edit: Ich stell den Link zur Dropbox einfach mal rein, wer will kann es sich ja mal anschaun, wäre sehr nett, Danke!
https://www.dropbox.com/s/sy3fzoptz1t4wpk/AmericaGame.zip?dl=0
-
Ich glaub ich hab jetzt endlich die Lösung
Vorher war das Fullscreen, jetzt nichtmehr und es geht
Ka wieso, aber Hauptsache es funktioniert endlich!Vielen Dank an all die Hilfe, wirklich top! Ohne euch wär ich nie draufgekommen
Grüße Boss
-
BOSS2000 schrieb:
Vielen Dank an all die Hilfe, wirklich top! Ohne euch wär ich nie draufgekommen
Finde ich auch gut, dass nach anfaenglichen unhilfreichen posts, hier viele freundlich mithalfen.