Ich möchte jetzt wissen ob meine Kugel auf dem Feld mit einem "." ist.
Nun Habe ich nur die X und Y Koordinaten.
Die Feldhöhen sind in einem 2 Demensionalem Array gespeichert.
Ich brauche nun die Feldnummern.
Wobei nur die Punkte als Nummern Zählen . , . , . , . Wäre also 3 lang (0 einbezogen)
Versteht ihr das?
Die Feldgrößen sind Variierbar. Die habe in in einer Variable stehen. (Alle Felder sind gleich Groß.)
Also ich habe deinen Post mehrmals gelesen - und verstehe höchstens nebulös, was du meinst!
Zitat:
Ich möchte jetzt wissen ob meine Kugel auf dem Feld mit einem "." ist.
Ok, du hast ein Objekt, das auf deiner Map positioniert ist.
Zitat:
Nun Habe ich nur die X und Y Koordinaten.
Von was? Der Kugel?
Zitat:
Die Feldhöhen sind in einem 2 Demensionalem Array gespeichert.
ok
Zitat:
Ich brauche nun die Feldnummern. Wobei nur die Punkte als Nummern Zählen . , . , . , . Wäre also 3 lang (0 einbezogen) Versteht ihr das?
Nein!
Wenn nur Punkte als Koordinaten zählen (wobei mir der Sinn des Ganzen abgeht), steht die Kugel doch immer auf einem Punkt, wenn ihre Position in eben solchen Koordinaten angegeben ist. Wenn du hingegen die Koordinaten der Kugel in deinem 2D-Feld meinst, kannst du dieses ja einfach auslesen, indem du die Position der Kugel als Zeilen- und Spaltenindizes verwendest (allerdings glaube ich nicht, dass du deine Frage so elementar war)
Zitat:
Die Feldgrößen sind Variierbar. Die habe in in einer Variable stehen. (Alle Felder sind gleich Groß.)
Ich nehme an, dass du die Position der Kugel in "Real"-Koordinaten hast, und nun die entsprechenden Indizes in dein 2D-Feld haben möchtest. Die Indizes i und j entsprechen dann:
Code:
i = Trunc(x / SizeX)
j = Trunc(y / SizeY)
Wobei (x,y) die Koordinaten deiner Kugel sind, SizeX, SizeY die Ausdehnung eines Elementes im Feld und i,j der Spalten/Zeilen Index in dein 2D-Feld.
Mh.
Ne die Kugel kann auch auf einem Komma oder sonstigem sein.
Und ich will wissen ob sie auf einem Punkt ist.
Mein bisheriger Source zum checken ob sie auf nem Bestimmten Feld ist. ist dieser:
Code:
function TMapKlasse.GetInterpolatedHeight(x, y:single):single;
var
x1,y1,x2,y2:integer;
fx,fy:single;
begin
OnFixedQuad :=false;
YofFixedQuad :=0;
x :=abs(x); y :=abs(y);
fx :=frac(x);
fy :=frac(y);
x1 :=trunc(x);
x2 := x1 +1;
y1 :=trunc(y);
y2 := y1 +1;
if x1 > high(vMap)-1then
begin
result :=0;
exit;
end;
if y1 > high(vMap[x1])-1then
begin
result :=0;
exit;
end;
if((x mod2)=0)and((y mod2)=0)then//Hier brauche ich die Abfrage passend.
begin
result := vMap[y1,x1].y*y_faktor;//Hier brauche ich die richtige Feldnummern.
YofFixedQuad := result;
OnFixedQuad :=true;
exit;
end;
end;
Aber der Klappt nicht so ganz.
Die Punkte sind höhen der Felder, ein Feld ist jetzt zB. 1*1 Groß.
Danach kommt ein Feld frei sozusagen, dann kommt wieder ein Feld. dann frei dann wieder usw.
Das in beide Richtungen.
Die Kugel hat momentan die Position 2,5/1,5 (X/Y) auf der Karte (Diese Position kennst du aber nicht)
Sie befindet sich somit auf dem Feld 2/1.
Da die Felder alle gleich groß sind - meinetwegen 32 - gestaltet sich das ganze sehr einfach.
Und du willst jetzt wissen, auf welchem Feld die Kugel ist? Hab ich dich richtig verstanden?
Du musst lediglich die Position der Kugel durch die Kästchenzahl teilen.
In diesem Fall also:
Kugel:
X: 80
Y: 48
Die Karte ist 3x3 Felder groß.
80 (Kugel.X) durch 32 (Feldgröße) = 2,5
48 (Kugel.Y) durch 32 (Feldgröße) = 1,5
Wenn du das jetzt abrundest, bekommst du die Position auf der Karte raus.
Code:
if Karte[Kugel.Kartenposition.X]='.'then tell_the_user_that_the_ball_is_on_the_right_place;
|X| sind die Felder, an denen es überhaupt sein kann das die kugel da drauf ist. und nur diese Felder zählen.
Wenn die kugel in der mitte ist, ist das das Feld 1,1 (Da Arrays bei 0 beginnen ist klar ne)
Die da zwischen sind nur leere Felder.
Nun wie berechne ich ob und auf welchem feld sich die kugel befinden?
Also irgendwie ist die Fragestellung immer noch sehr nebulös, weswegen Hilfestellung schwierig ist. Da ich annehme, dass du eigentlich nur eine Lösung für ein relativ einfaches Problem suchst, möchte ich dich bitten, einfach mal genau zu beschreiben, was du eigentlich machen willst, und vor allem wofür es gut sein soll (sowas in der Art von "Isometrisches Spiel von schräg oben, mit Mauern" - dann bin ich sicher, dass man dir besser weiter helfen kann.
Ein aussagekräftiges JPEG wäre eventuell auch besser, als diese ASCII Skizzen.
Also gut, ich nehme einfach mal ein Bild das ich hier schonmal wegen einem Problem postete.
Nun ich möchte wissen,
1. OB sich das Objekt auf einem GrünRotem Felt bewegt.
2. WO sich das Objekt bewegt, also aufem 1,2,3 oder 4ten Rot/Grünem Feld.
Grund:
Habe nur die höhen Daten der RotGrünen Felder.
Die anderen Felder sind nur zum verbinden der Map gedacht.
Das bewirkt, mehr als Doppeltsogroße Spielfläche durch gleichviele Variablen mit Infos.
Ist zwar net so flexible, aber ausreichend.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Dann sag einfach:" Ein Feld besteht aus dem eigentlichen Feld + 3 Verbinder"
1Feld:
Code:
|X|_|
|_|_|
Dann kannste wieder ganz normal arbeiten. Wenn du an den Rändern noch verbinder haben willst, dann rechnest du bei den Positionsrechnungen noch den entsprechenden Offset (Verschiebung) mit ein.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Wenn du die Position von A hast, musst du die Koordinaten ja nur durch die Länge von zwei Feldern dividieren, und bekommst die gesuchten Offsets. Nehmen wir an A hat die Koordinaten 4, 2 (bei nullbasierten Indizes) und zwei Felder sind 2 Einheiten lang, dann sind die gesuchten Offsets Trunc(4/2) und Trunc(2/2) also 2 und 1. So überprüfst du zwar nicht, ob sich die Kugel auf einem grün/roten Feld befindet oder nicht - nach deiner Definition tut sie das aber sowieso, und du möchtest nur wissen, auf welchem.
Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.