Dim-Felder
Übersicht

sprime |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
und konkret als code ? | ||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nix Konkret als Code. Wenn ich dir dein Spiel programmieren soll wirst Du mich dafür bezahlen müssen.
Sorry, aber Du postest in Allgemein, also muss ich annehmen dass Du die Grundlagen beherrschst und was Du fragst ist simpelste Mathematik. Du musst nur die Spielerkoordinaten in Arraykoordinaten umwandeln, was extrem simpel ist wenn Du weist wie Groß deine Figur ist. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also dann schreib doch mal kurz, wie du momentan die Kollision feststellst? und den code dazu.
Normalerweise macht man das ja so, dass man die Spielerpos kennt und da schno "ahnt" mit welchen Bananen es einen Zusammenstoß geben könnte. Dein Ansatz war da auch schon gut, wurde aber von vielen hier zerredet. Die Aktuelle (Spielpos+16)/32 ergibt in welchen Feld du gerade stehst. z.b. Spieler ist bei 300,200 316/32=9 216/32= 6 dann steht der spieler etwa bei feld(9,6) die zu testenden bananen wären dann in den Feldern. links und rechts davon: (9,5), (9,6) und (9,7) darüber (8,5), (8,6) und (8,7) darunter: (10,5), (10,6) und (109,7) als for-Schleife for y=y-1 to y+1 for i=x-1 to y+2 imagecollide testen wenn ja dann banane bei (i,j) verschwinden lassen next next verstehst du den ansatz? |
||
sprime |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
den ansatz versteh ich, muss jetz nur noch versuchen das umzusetzen ![]() die kollision mit der banane ? |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
ja, wenn du immer so wenig von deinem code hier reinstellst, musst du es wohl alleine machen.
dann bis gleich.... |
||
sprime |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
If banane((Player_pos_x +16) /32,(Player_pos_y +16) /32)>=1 Then ;banane is das dim-feld
banane((Player_pos_x +16) /32,(Player_pos_y +16) /32)=0 EndIf das funktioniert nicht.. warum ?? ich habe es so gemacht, dass wenn die banane an der spielerpositition ist, bzw der spieler bei der banane, das dann die banane and er stelle wo der spieler ist = 0 ist (also verschwindet).. wo ist mein denkfehler ? |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
nicht immer gleich übers funktionieren sprechen, erst mal sehen, ob der code funzt...
schreib mal keine so monsterzeilen, das hilft keinen außer dem fehlerteufel also nochmal langsam: schritt 1 aus Playerpos_X und -Y die FeldX und -Y des Player ausrechnen und gleich in zwei Variable merken schritt 2 nicht nur die FeldX,FeldY-Banane checken, sondern auch die 9 anderen Code: [AUSKLAPPEN] 0 0 0 0 0
0 1 1 1 0 0 1 P 1 0 0 1 1 1 0 0 0 0 0 0 ...das eben mit der For-Schleife schreib das mal ganz an das Ende des Codes: BlitzBasic: [AUSKLAPPEN]
Das ist jetzt mal eine Funktion, die Du einfach so an der gewünschten Stelle deines Codes aufrufen kannst: KollisionsCheck() Die Funktion testet noch keine Collision, und kann auch noch keine Banane verschwinden lassen,aber sie zeigt im DEBUGGER, ob wir überhaupt die richtige Ecke des Spielfelds checken.... |
||
sprime |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hab jetz für die berechnung der dimfelder 2 variablen:
i = (player_pos_x + 16) /32 und j= (player_pos_y + 16) /32 dann hab ich: For i= i-1 To i+1 For j=j-1 To j+1 If munze(i,j)>=1 Then munze(i,j)= 0 EndIf Next Next die zwei funktionen funktionieren i.wie nicht, der sagt mir zu wenig parameter |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
die zweite funktion nutzt du gar nicht direkt.
in der 1.funktion wird sie automatsich aufgerufen (siehe mein bespiel) sie erwartet als "Parameter" zwei Werte: ein Feld-X und ein Feld-Y. Damit checkt sie, was auf dem Feld los ist. Warum baust Du die funktionen nicht einfach so ein, wie sie gepostet habe? So wie du es geschrieben hast, müßten die Bananen schon verschwinden. Kannst Du das beobachten? Wird der Bildschirm wirklich wieder neu aufgebaut? Hast Du dazu schon mein Tutorial "Spiel-Ablauf" Lektion I -IV gelesen? Was ist jetzt wieder munze()? |
||
- Zuletzt bearbeitet von Midimaster am So, Jan 10, 2010 0:18, insgesamt einmal bearbeitet
sprime |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@ das tutorial hab ich noch nicht gelesen
@ munze, da mein ich banane mit, hab ich mich vrschrieben xD |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ob munze() oder banane() ist ja egal, später machen eh bloß die bilder das Spiel zum einen oder anderen....
Ganz genau genommen müßte diese Variable wenn schon, dann Feld() heißen. Den das beschreibt sie eigentlich: ein Spielfeld auf dem GesamtBrett. Dieses umbenennen hatte ich dir auch schon mal vorgeschlagen. Eigentlich hast Felder Feld(X,Y) auf denen nix=0 liegt feld(Y,Y)=0 oder eine Banane=1 liegt: Feld(x,y)=BANANE, oder eine MÜNZE=2, oder .... verstehst du? DIM Feld%(35,16) NIX=0 BANANE=1 MUNZE=2 Jetzt mal was zur IMAGECOLLIDE von den 9 möglichen Felder prüfen wir, ob dort bei Feld (i,J) überhaupt eine Banane ist IF Feld(i,j)=BANANE Wenn ja, prüfen wir, ob das Bild, das dort (i*32,j*32) gemalt ist, mit dem Bild des Spielers auf Spieler_X, Spieler_Y ist Überschneidungen hat: IF ImageCollide BananeBild, i*32, j*32, 0, PlayerBild, Player_x, Player_Y, 0) Wenn ja setzen wir das Feld (i,j) auf 0 Feld(i,j)=NIX |
||
![]() |
Jamagin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das kann doch nicht so schwer sein! Midimaster sagt eh schon wie's geht! Tja, die Umsetzung mußt du schon selbst machen sonst siehe Beitrag BladeRunner!!
Ich hab eine Funktion in meinem Spiel wo man Goodies einsammelt und hab das auch mit DIM und mit TYPES erstellt. Außerdem wenn ich was auf Kollision prüfe, warum sollte ich checken ob in den umherliegenden Feldern was drin ist?? Wenn eine Banane dort liegt, wird die Funktion sowieso abgearbeitet, wenn keine dort liegt ist der Wert sowieso Null, da ja bei der Kollisionsprüfung die Banane aus der Liste gelöscht wird. Also, Das Spielfeld in DIM feld(x,y) und die Banane als Type-List. Somit wären deine Probleme gelöst. Viel. stell ich meine Funktion rein... lg. Jamagin ![]() |
||
Bevor du etwas neues beginnst, erledige das alte |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group