Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 03.09.2008, 14:54 Titel: allgemeine frage zu kollisionen |
|
|
Also in meinem SPiel habe ich das jetzt so dass nach jeder bewegung geprüft wird ob die koordinate auf der sich die spielfigur befindet begehbar ist. Wenn diese Koordinate nicht begehbar ist dann ist die Spielfigur wieder auf der vorherigen koordinate. ABer das ist etwas umständlich bei programmieren dieser orte, ich hab das jetzt in etwa so:
Code: |
if koordinatex = 34 and koordinatey = 58 or koordinatex = 37 and koordinatey = 50 or und so weiter
then koordinatex =
koordinatey = alteykoordinate
end if
|
Man kann aber auch noch etwas vereinfachen aber nur wenn die punkte aneinander liegen:
code]
if koordinatex = 34 or koordinatex = 34 and koordinatey = 58
then koordinatex =
koordinatey = alteykoordinate
end if
[/code]
Aber bei schon wenn man 50 Koordinaten hat die nicht begehbar sind dann ist das schon doof genug aber ich habe noch mehr und frage euch deshalb nach einer anderen möglichkeit. Ich ahbe das bis jetzt mit einer case schleife gelößt aber das ist ja fast das selbe und immernoch viel arbeit. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 03.09.2008, 15:10 Titel: |
|
|
Ein Array anlegen, in dem gespeichert ist, was begehbar ist und was nicht (steht schon mal im Forum, bin jetzt zu faul zu suchen )
Code: | dim as byte feld(100, 100)
feld(34, 58) = 1 ' nicht begehbar
' ...
if feld(koordinatex, koordinatey) = 1 then geheWiederZurueck |
_________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 03.09.2008, 15:18 Titel: |
|
|
ich wusste nicht dass man kommas in die array nummer packen kann. Ich hab auch schon an Arrays gedacht aber mit der 2 koordinate kam ich dann nicht zurecht .
Auf jeden Fall erstmal Danke für die schnelle Hilfe! |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 03.09.2008, 15:26 Titel: |
|
|
Du packst keine Kommas in die Nummern, sondern es wird ein zweidimensionales Array-Feld erzeugt.  _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 03.09.2008, 16:55 Titel: |
|
|
nemored hat Folgendes geschrieben: | Du packst keine Kommas in die Nummern, sondern es wird ein zweidimensionales Array-Feld erzeugt.  |
Klar, das habe ich schon in einem Tutorial gelesen aber ich hatte das nicht verstanden denn ich dachte es ging um den inhalt der variablen aber durch den beispiel habe ich es sofort verstnaden.
edit:
man kann das doch auch mit "to" in den arrays machen also so:
Code: | dim as byte koordinate(34 to 44 , 50) =1 |
|
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 03.09.2008, 17:09 Titel: |
|
|
Nein, dieses TO bedeutet, dass du ein Feld anlegst, dessen Indizes von Startwert bis Zielwert gehen.
Code: | DIM as byte var(3 to 5) |
jetzt existieren var(3), var(4) und var(5). Ein var(2) existiert z. B. nicht.
Die beiden Anweisungen
Code: | DIM as byte var1(5)
DIM as byte var2(0 to 5) |
sind gleichbedeutend.
Wenn du eine Zuweisung über mehrere Einträge machen willst, kannst du zum Beispiel eine Schleife verwenden. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 03.09.2008, 17:29 Titel: |
|
|
nemored hat Folgendes geschrieben: | Nein, dieses TO bedeutet, dass du ein Feld anlegst, dessen Indizes von Startwert bis Zielwert gehen.
Code: | DIM as byte var(3 to 5) |
jetzt existieren var(3), var(4) und var(5). Ein var(2) existiert z. B. nicht.
Die beiden Anweisungen
Code: | DIM as byte var1(5)
DIM as byte var2(0 to 5) |
sind gleichbedeutend.
Wenn du eine Zuweisung über mehrere Einträge machen willst, kannst du zum Beispiel eine Schleife verwenden. |
So meinte ich das auch aber ich war mir nicht ganz sicher. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 03.09.2008, 17:51 Titel: |
|
|
Deine genannte Zuweisung
Code: | DIM AS BYTE koordinate(34 TO 44 , 50) =1 |
wird allerdings nicht funktionieren. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 03.09.2008, 18:26 Titel: |
|
|
nemored hat Folgendes geschrieben: | Deine genannte Zuweisung
Code: | DIM AS BYTE koordinate(34 TO 44 , 50) =1 |
wird allerdings nicht funktionieren. |
Wenn ich das to und die 34 weglasse werden dann auch die arrays (43,50) und (22,50) "gedimt"?
SOnst probier ich das morgen einfach mal aus  |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 03.09.2008, 18:47 Titel: |
|
|
Ja genau, mit
Code: | DIM AS BYTE koordinate(44 , 50) |
kannst du jetzt alle koordinate(x, y) verwenden, bei denen x eine Zahl von 0 bis 44 und y eine Zahl von 0 bis 50 ist. Also z. B. auch koordinate(22, 50) oder koordinate(13, 37) usw. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
The_Muh aka Mark Aroni

Anmeldungsdatum: 11.09.2006 Beiträge: 718
|
Verfasst am: 03.09.2008, 21:41 Titel: |
|
|
statt einem 2-dimensionalem array könntest du auch ein UDT nehmen:
Code: |
type koordinaten_type
x as integer
y as integer
typ as integer
'usw...
end type
dim ko(1 to 50) as koordinaten_type
ko(1).x = 255
ko(1).y = 157
ko(30).typ = 1
|
damit könntest du den einzelnen feldern gleich zuweisen was für grafiken diese haben, was für auswirkungen sie bei berührung haben (z.b. level-ups o.ä,) ohne dafür zusätzliche arrays nehmen zu müssen. _________________ // nicht mehr aktiv // |
|
Nach oben |
|
 |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 03.09.2008, 21:59 Titel: |
|
|
@the muh: Ich mach das lieber mit den Arrays weil ich mir das damit besser vorstellen kann, außerdem müsste ich dann ja auch mehr tippen. Aber ich dank dir trotzdem weil ich kann an praktischen beispiel am besten etwas lernen, ich habe dazu nämlich schon das Tutorial überflogen doch weil ich sowas noch nicht brauchte hab ich mir das nie genau angeguckt. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 03.09.2008, 22:40 Titel: |
|
|
@The_Muh: Ich sehe bei deiner Lösung in diesem Fall den Nachteil, dass ich bei einer Überprüfung, ob das betretene Feld erlaubt ist, erst alle ko() durchwühlen muss, ob eines zu meinen Koordinaten passt. Zu den level-ups: Auch diese passen noch bequem in das eine Array (einfach verschiedene Nummern vergeben, evtl. sogar - damit man sich die Zuweisung besser merken kann - entsprechende Konstanten festlegen). UDTs machen eher Sinn, wenn noch mehr Informationen einfließen, z. B. besondere Bodentypen UND verschiedene herumliegende Gegenstände UND Nebel des Krieges UND ...; aber auch da würde ich bei einem zweidimensionalen Array bleiben, das dann halt nicht vom Datentyp Zahl, sondern vom Datentyp MeinUDT ist. Es lässt sich einfach viel schneller abfragen, wo doch die Spielerposition sowieso schon zweidimensional vorliegt. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
|