|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
DerJJ Junior JLI'ler
Anmeldedatum: 24.12.2002 Beiträge: 84
Medaillen: Keine
|
Verfasst am: 12.02.2003, 14:37 Titel: Brauche Tips für Felder |
|
|
Also,
ich würde es ganz gut finden wenn ihr mir mal Tips geben könntet wie ich am einfachsten rausfinde ob auf ein Feld geklickt wurde, und auf welches Feld geklickt wurde!
Ich hab hald mein Spielfeld, das geht von x 10 - 810 und y 10 - 610...
Das will ich in 50ger schritten in ein Feld aufteilen, also ich würde jetzt 16*12*2 if Anweisungen schreiben um herauszufinden wo ich geklickt habe! Das muss doch auch einfacher gehen! Und dann auchnoch überprüfen was für ein Wert diese Variable hat, dann müsste ich das ergebniss nochmal *5 oder so nehmen damit ich weiß wieviel IF Anweisungen ich schreiben müsste. Und, ich will dann an der Stelle ein Bild ausgeben, müsste ich dann extra nochmal überprüfen wo geklickt wurde? oder kann ich das irgendwie von den Variablen abhängig machen? |
|
Nach oben |
|
|
Michael JLI'ler
Anmeldedatum: 20.07.2002 Beiträge: 173 Wohnort: Münster / NRW Medaillen: Keine
|
Verfasst am: 12.02.2003, 15:07 Titel: |
|
|
hol dir mit GetCursorPos() die Position des Cursors. Dann rechnest du:
Code: |
POINT p;
GetCursorPos(&p);
int FeldInXRichtung = (Pos.x - 10) / 50;
int FeldInYRichtung = (Pos.y - 10) / 50;
|
Dann hast du den Index des aktuellen Feldes, und zwar 0-15 in x- und 0-11 in y-richtung! _________________ Es geht auch ohne |
|
Nach oben |
|
|
=]Mid[=]Night[= Super JLI'ler
Anmeldedatum: 20.11.2002 Beiträge: 380 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 12.02.2003, 15:09 Titel: |
|
|
Also, du musst doch die Position haben, wo du hingeklickt hast. Die Koordinaten musst du nur noch durch die Feldbreite auf der jeweiligen Achse (X-Koordinate durch Feldbreite in X-Richtung, Y genauso) teilen und dann abrunden. Dann hast du die Position von dem Feld.
edit: oh war einer schneller
Zuletzt bearbeitet von =]Mid[=]Night[= am 12.02.2003, 15:10, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 12.02.2003, 15:10 Titel: |
|
|
Das ist doch eigentlich ganz trivial... Mathe aus der 5. Klasse:
Code: |
int tile_x = cursor_x / TILE_WIDTH;
int tile_y = cursor_y / TILE_HEIGHT;
// Wenn du dann noch wissen willst, welcher Pixel innerhalb des Tiles geklickt wurde, nimmst du ganz einfach den Rest(Modulo) der Division:
int pixel_x = cursor_x % TILE_WIDTH;
int pixel_y = cursor_Y % TILE_HEIGHT;
|
Ich hoffe mal, dass das einigermaßen einleuchtend und verständlich war... wenn nicht, einfach mal'n kariertes Blatt Papier nehmen uns ausprobieren... So hab ich das auch gemacht. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
DerJJ Junior JLI'ler
Anmeldedatum: 24.12.2002 Beiträge: 84
Medaillen: Keine
|
Verfasst am: 12.02.2003, 16:02 Titel: |
|
|
mmmhh... irgendwie komm ich mir jetzt blöd vor..
Aber danke!
Hab jetzt nochn problem...
Die MessageBox wird nich aufgerufen... wenn ich aber jedesmal '!=0' anstatt '==0' schreibe dann gehts...
Code: | case WM_CREATE:
int x,y;
y=0;
x=0;
do
{
Feld[x][y]=0;
if(x==15)
{
if(y==11)
{
break;
}
y++;
x=-1;
}
x++;
}while(x<=15);
break;
...
case WM_LBUTTONDOWN:
int xFeld;
int yFeld;
x = LOWORD(lParam);
y = HIWORD(lParam);
if(x>=10&&x<=810&&y>=10&&y<=610)
{
xFeld=(x-10)/50;
yFeld=(y-10)/50;
if(Feld[xFeld][yFeld]==0&&Feld[xFeld+1][yFeld]==0&&Feld[xFeld][yFeld+1]==0&&Feld[xFeld+1][yFeld+1]==0)
{
MessageBox(0,"Test","Test",MB_OK);
}
}
|
Helft mir plz... |
|
Nach oben |
|
|
DerJJ Junior JLI'ler
Anmeldedatum: 24.12.2002 Beiträge: 84
Medaillen: Keine
|
Verfasst am: 16.02.2003, 18:18 Titel: |
|
|
Also, das obere hat sich erledigt,
jetzt will ich alles Überprüfen, ob irgendwo ein Haus steht...
also, wenn die variable 1 ist, und rechts daneben, dadrunter und beides auch 1, dann steh da ein Haus;
ich sitze jetzt schon den ganzen tag dadran, also langsam könnten auch schon Idiotenfehler drin sein,
am Anfang wars ne Endloschleife die nich ausgehen wollte...
jetzt hab ich das Haus überall...
und ich weis net wieso....
hier mal der Code:
Code: | Feld[7][5]=1;
Feld[8][5]=1;
Feld[8][6]=1;
Feld[7][6]=1;
for(a=1;a<16;a++)
{
a--;
if(Feld[a][b]==1&&Feld[a+1][b]==1&&Feld[a][b+1]==1&&Feld[a+1][b+1]==1);
{
BitBlt(hdc,(a*50)+10,(b*50)+50,Kontrollzentrum.bmWidth,Kontrollzentrum.bmHeight,hdcKontrollzentrum,0,0,SRCCOPY);
}
a++;
if(b==11&&a==15)
{
a=150;
MessageBox(0,"wirklich ende","muh",MB_OK);
}
if(a==15)
{
a=-1;
b++;
}
} |
|
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 18.03.2003, 19:37 Titel: |
|
|
DerJJ hat Folgendes geschrieben: | Code: | if(a==15)
{
a=-1;
b++;
}
|
|
Warum schreibst du hier
So wird a am Ende der Schleife erweitert, also a=0.
Später verkleinerst du a wieder, anscheinend wegen der grafischen Darstellung. a=-1
Und so greifst du auf ein ungültiges Element von Feld zu(es gibt nur Feld[0-6][0-4])
Du solltest also schreiben:
_________________ 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 |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|