Permalänk

Positionering i C++

Skulle vilja kolla positionen på en SDL_Surface för ett shack-spel men har hjärnsläpp i hur man gör detta.

while ( c < 2 ) { if ( x >= pieces1[c].pixels && x <= pieces1[c].pixels && (y >= pieces1[c].pixels && y <= (pieces1[c].pixels + 70)) { c = 2; } c++ }

Här är ett av mina tidigare 100 ful-försök att fixa det. Pieces1[] är en array med SDL_Surface's.

Är måttlig nybörjare i C++, har någon lust att hjälpa/förklara eller liknande?

Visa signatur

Programmerande får mig att tänka friskt och klart! Mitt nya liv blir underbart!

Permalänk
Medlem

Vad menar du med position? En SDL_Surface är ju bara en yta du kan rita på, den har ingen position annan än vad du själv associerar med den.

Permalänk
Medlem

Jag förstår inte heller vad du pysslar med, menar du positionen i din array eller på skärmen?
Positionerna är som sagt vad du anger dom att vara, tex när du ritar ut gör du liknande minsurface.draw(x,y,...) då har du vänster nedre hörn angett av x och y, dom andra hörnen kan du räkna ut själv mha width och height...

Om du vill lagra din surface med en position får du göra det själv i en struct eller class, som sedan håller i din surface.

Förklara lite bättre för oss så kan vi nog lösa detta.

Permalänk

Ledsen att jag inte var direkt tydlig, var lite övertrött när jag skrev detta.

while ( c < 2 ) { if ( x >= SurfacePositionX[c] && x <= (SurfacePositionX[c] + 70) && y >= SurfacePositionY[c] && y <= (SurfacePositionX[c] + 70)) { c = 2; quit = true; } c++; }

Detta var mitt nya försök i alla fall. Vad jag vill göra är att jämföra musens koordinater när man håller nere musknappen med en shack-pjäs koordinater så att man kan flytta den.

Nu skapade jag en int[] istället för statiska värden i inmatningen så att jag kan jämföra dem. Det verkar fungera då det stängs ner när jag klickar en pjäs.

Vet inte om detta är det bästa sättet att lösa det... men fungerar, det gör det!

EDIT: Glömde nästan: tack för hjälpen!

Visa signatur

Programmerande får mig att tänka friskt och klart! Mitt nya liv blir underbart!

Permalänk
Medlem

Bra att du lyckades lösa problemet, jag skulle dock rekomendera dig att använda en for-loop och break istället för while loopen dvs:

for(int c = 0; c < 2; c++) { if ( x >= SurfacePositionX[c] && x <= (SurfacePositionX[c] + 70) && y >= SurfacePositionY[c] && y <= (SurfacePositionX[c] + 70)) { quit = true; break; } }

Visa signatur

[Amd 2500+ @ 3200+] ¤ [Abit NF7] ¤ [1024 ddr @ 400 mHz] ¤ [Radeon 9600 pro] ¤ [Maxtor diamond max 160Gb] ¤ [Lain li PC 60]

http://forum.sweclockers.com/showthread.php?s=&postid=3916792...

Permalänk
Skrivet av G4jm0r:

Bra att du lyckades lösa problemet, jag skulle dock rekomendera dig att använda en for-loop och break istället för while loopen dvs:

for(int c = 0; c < 2; c++) { if ( x >= SurfacePositionX[c] && x <= (SurfacePositionX[c] + 70) && y >= SurfacePositionY[c] && y <= (SurfacePositionX[c] + 70)) { quit = true; break; } }

Jag tänkte faktiskt göra det men min inre lathet sade att det inte spelar så stor roll nu när jag ändå bara lär mig grunderna.

Visa signatur

Programmerande får mig att tänka friskt och klart! Mitt nya liv blir underbart!