GLBasic forum

Other languages => GLBasic - de => Topic started by: Visual on 2008-Jan-06

Title: Fragen zu 1.Menüablauf, 2.Bewegung, 3.Kollision, 4.Gestaltung
Post by: Visual on 2008-Jan-06
Ja noch einmal Hallo. Ich arbeite derzeit an einem Arkanoid-Klon, nämlich Bananoid und um einiges komplexer. Diesen Klon habe ich mit dem Game Maker schon einmal fast beendet, nur ist mir ein Teil der C:\-Partition abgeschmiert, alles weg, kaum sicherheitskopien, ect ...

Ich habe die aktuellste Exe noch (ca. 95% und komplett spielbar), besitze sämtliche Grafiken, Sounds, Backgrounds, Texte ... sozusagen alles und weiß wie es aussehen soll und was ich vorhabe. Das Hauptmenü mit Buttons und Mauskollision in GLBasic war alles kein Thema, nun ein paar Fragen.

1. Im Hauptmenü habe ich unter anderem einen Spielstarten-Button. (hier nur ein Teilcode des Hautpmenüs)

Code (glbasic) Select
//Zum Spielwahlmenü
IF SPRCOLL (0, mx, my, 11, 105, 125)
DRAWSPRITE 12,105,125
PLAYSOUND (4,0,1)
IF MOUSEAXIS(3) = TRUE
PLAYSOUND (5,0,1)
GOTO Gamemode
ENDIF
ENDIF
Er spielt den Sound 4 irgendwie nicht ab. Die restliche Funktion funktioniert, er geht dann in ein anderes (neugedrawtes) Menü. Dort soll man den Spielmodus auswählen. Nur kommt es nicht soweit, weil er (ich vermute es so) schon auf den nächsten Button, der die selben Koordinaten wie der Startbutton hat, liegt. Wie verhindere ich das?

2. Statt zum Spielmodusmenü (also GOTO Gamemode) geht er direkt in das Spiel über. Dort ist momentan nur der Schläger, in meinem Fall eine Banane gezeichnet. Diese Bewegt sich zur Maus, alles toppi. Darüber wird nun der Ball gezeichnet. Nun die Frage, und zerlöchert mich bitte nicht....ich hab alles versucht mir das mit der Ballbewegung aus Pong bzw. Arkanoid abzukucken, nur ohne Erfolg. Wie kann ich den Ball mit einer bestimmten Geschwindigkeit bewegen lassen? Der Ball heißt übrigens "ball_rot.bmp" ,3

3. Alle Grafiken, die nicht rechteckig sind, haben RGB 255, 0, 128. Wenn nun der Ball auf die gekrümmte Banane auftrifft, kann man diese dann nach physikalischer Formel "Einfallswinkel = Ausfallswinkel" abprallen lassen? Der Ball ist übrigens auch rund.

4. Im GameMaker gab es eine integrierte Hilfedatei zum selbsterstellten Projekt. Also konnte man selber hineinschreiben, was man für eine Hilfe wichtig hält und diese war für den Spieler im Spiel mit F1 erreichbar. Ich will ein eigenes Menü für die Hilfe machen und meine Hilfe hat ~700 Wörter. Diese alle zu zeichnen auf einen (bin leider noch unregistriert) 640*480 großen Screen halte ich für sinnlos. Könnte man einen Scrollbalken nicht einbauen, mit dem man halt scrollen kann? Oder habt ihr bessere Ideen?

Sind zwar viele Fragen, aber ich denke für euch nicht das Thema. Vielen Dank im Vorraus ...

Mfg Visual
Title: Fragen zu 1.Menüablauf, 2.Bewegung, 3.Kollision, 4.Gestaltung
Post by: Kitty Hello on 2008-Jan-06
Geht den der Sound4 überhaupt? Ist evtl. die Samplerate unbekannt? Probier mal loadsound/playsound/mousewait

Warte, bis der Knopf wieder losgelassenwird:
WHILE KEY(xxx); WEND

3 konst Geschwindigkeit:
 V= 1.0 // irgendein Wert:
 phi = rnd(360) // Winkel der Richtung
 x = x + cos(phi)*v
 y = y - sin(phi)*v

Winkel aus dx,dy: phi = atan(dy,dx)

3. Winkel aus Pixelkollisionen ist quasi unmöglich. Musst Du improvisieren. Evtl. für den x-wert am Schläger einen anderen Winkel.

4. Mit rechter MT auf den Editor, kann man "Werkzeuge/Hilfe erstellen" wählen.
Die dann mit SHELLCMD("hilfe.html") öffnen.
Title: Fragen zu 1.Menüablauf, 2.Bewegung, 3.Kollision, 4.Gestaltung
Post by: Visual on 2008-Jan-07
Vielen Dank für die schnelle Hilfe :). Werde es gleich mal ausprobieren ...

Neues:

Zu 1. Im Windows Mediaplayer geht alles, bei GlBasic nicht. Muss mir wohl einen neuen suchen. Und das mit den Buttons und der Maus geht jetzt ohne Probleme.

Zu 3. Muss ich wohl noch sehr überlegen ...

Zu 4. Ja müsste klappen, muss mir die Batchbefehle nochmal ankucken.

Zu 2. Da habe ich noch so arge Probleme. Habe es mit allen mir logischen Kombinationen deiner/ihrer Vorgaben versucht. Bin mir nicht einmal sicher, ob man mit "ball_rot_x" den X-Wert für das Sprite festlegen kann, also die Zuweisung eines Objektes.

Also ich lade obenrum die Musik, erstelle den Hintergrund, setze die Mausposition fest, und verstecke diesen
Im Spiel kann ich mit der linken Maustaste eine Zeitlupe machen, ist noch nicht final, denn der Gesamtwert muss noch festgelegt werden ect.

//Hier die hierfür notwendigen Spritenamen
//LOADSPRITE "gfx/banane_gelb.bmp",0
//LOADSPRITE "gfx/ball_rot.bmp" ,3
//LOADSPRITE "gfx/interface_up.bmp",6
//LOADSPRITE "gfx/interface_side.bmp",7
//LOADSPRITE "gfx/interface_down.bmp",8
//LOADSPRITE "gfx/interface_frame.bmp",9


QuoteGamenormal:
SYSTEMPOINTER FALSE
PLAYMUSIC "level1.mid"
LOADBMP "gfx/level1.bmp"
SETMOUSE 320, 375

WHILE TRUE

   MOUSESTATE mx, my, b1 ,b2
   DRAWSPRITE 6,0,0
   DRAWSPRITE 7,0,0
   DRAWSPRITE 7,622,0
   DRAWSPRITE 8,0,448
   DRAWSPRITE 9,370,455
   DRAWSPRITE 0,mx-83,375
   DRAWSPRITE 3,320,300

   IF MOUSEAXIS(3) = TRUE
      LIMITFPS 20
   ELSE
      LIMITFPS 60
   ENDIF
   
SHOWSCREEN
WEND
Nun zu meinem Problem. Wo und vorallem wie werden:

V= 1.0 // irgendein Wert:
phi = rnd(360) // Winkel der Richtung
x = x + cos(phi)*v
y = y - sin(phi)*v
phi = atan(dy,dx)

Und die Ball-x/y-Wert Zuordnung festgelegt? Oh mein Gott ... Fragen über Fragen :rolleyes
Title: Fragen zu 1.Menüablauf, 2.Bewegung, 3.Kollision, 4.Gestaltung
Post by: Visual on 2008-Jan-08
Ich will ja nicht aufdringlich wirken, aber kann mir bitte jemand helfen? Ich weiß nämlich nicht, wie ich die oben genannten Werte Werte dem Ball zuordne ... :(
Title: Fragen zu 1.Menüablauf, 2.Bewegung, 3.Kollision, 4.Gestaltung
Post by: mull on 2008-Jan-08
Ich mach das so:

  Schritt = 1 / FpsSchnitt * (AniPower) // AniPower = Pixel pro Sek.
  Winkel = ATAN(F[X][Y].ZielX - F[X][Y].PosX, F[X][Y].ZielY - F[X][Y].PosY)
  W = SIN(Winkel) * Schritt ; H = COS(Winkel) * Schritt
  INC F[X][Y].PosX, W ; INC F[X][Y].PosY, H
Title: Fragen zu 1.Menüablauf, 2.Bewegung, 3.Kollision, 4.Gestaltung
Post by: Visual on 2008-Jan-08
Das kann ja alles stimmen, nur ich weiß nicht, trotz PONG-, oder Arkanoid-Anleitung ect., wie man dem Ball, in meinem Falle "ball_rot", den X-Wert und Y-Wert zuordnet... ball_rot.x war es bei GML, da ging das alles wunderbar...wird das LOCAl bei Glbasic festgelegt, muss es in der Schleife stehen....das weiß ich halt leider nicht ...
Title: Fragen zu 1.Menüablauf, 2.Bewegung, 3.Kollision, 4.Gestaltung
Post by: Schranz0r on 2008-Jan-08
öhhhhhhh hast du dir je die Tutorials angeguckt?
Kann ich fast nicht glauben, sorry...

einen Wert zuweisen:
...
DRAWSPRITE 3, x, y

dafür sind ja die Variablen da!
Title: Fragen zu 1.Menüablauf, 2.Bewegung, 3.Kollision, 4.Gestaltung
Post by: Visual on 2008-Jan-08
Quote from: Schranz0röhhhhhhh hast du dir je die Tutorials angeguckt?
Kann ich fast nicht glauben, sorry...

einen Wert zuweisen:
...
DRAWSPRITE 3, x, y

dafür sind ja die Variablen da!
Quote from: VisualDRAWSPRITE 6,0,0
DRAWSPRITE 7,0,0
DRAWSPRITE 7,622,0
DRAWSPRITE 8,0,448
DRAWSPRITE 9,370,455
DRAWSPRITE 0,mx-83,375
DRAWSPRITE 3,320,300
Bei genauerem Hinsehen kann man deutlich erkennen, dass ich das bereits mit der Position auf X-/Y-Achse verstanden habe ... und vor allem das ich das überhaupt nicht meine. Die Angaben von Gernot, dir (woanders im Forum), oder Mull hab ich ja verstanden, aber ich denke nicht das ich die bei DrawSprite einsetzen kann. Ich kann ja kann die ja nicht einfach reinkopieren, da noch zugewiesen werden muss. Das meinte ich ja mit
QuoteIch weiß nämlich nicht, wie ich die oben genannten Werte Werte dem Ball zuordne ...
oder
QuoteWo und vorallem wie werden: [...] Und die Ball-x/y-Wert Zuordnung festgelegt?
Beim Pong-Beispiel ist es ja so
Code (glbasic) Select
// Ballgeschwindigkeit in X umdrehen / Flip ball's X-direction
    ball_sx= -ball_sx
    // Schneller machen / Speed up
    ball_sx = ball_sx * 1.2
    ball_sy = ball_sy * 1.05
und

Code (glbasic) Select
// Ball
 ball_x=ball_x+ball_sx
 ball_y=ball_y+ball_sy
Ich habe ja bereits getestet, ob es bei mir so klappt...ohne Erfolg und zu wissen, ob ich es wenigstens Ansatzweise richtig gemacht habe. Ob es halt eine Funktion ist, die im Step-Event liegt, oder Local festgelegt wird.

Weißt du denn jetzt wie ich das meine? Hmm ...
Title: Fragen zu 1.Menüablauf, 2.Bewegung, 3.Kollision, 4.Gestaltung
Post by: Kitty Hello on 2008-Jan-09
Es gibt keine "events".
Wenn Du ball_x = ... zuweist, dann musst Du ball_x auch zum Zeichnen verwenden:

Code (glbasic) Select
WHILE TRUE
   INC kungfu, KEY(57)
   PRINT "FU", kungfu, 0
   PRINT "XX", x, 0
   SHOWSCREEN
WEND
...drück die Leertaste. FU bewegt sich, weil Du den Wert für kungfu änderst. aber eben nicht den für 'x'.
Title: Fragen zu 1.Menüablauf, 2.Bewegung, 3.Kollision, 4.Gestaltung
Post by: Visual on 2008-Jan-09
Quote from: GernotFrischEs gibt keine "events"
Damit meine ich ja die Schleife...bei GML war die Schleife immer im Step-Event...schwer zu erklären, halt angewohnheit
Title: Fragen zu 1.Menüablauf, 2.Bewegung, 3.Kollision, 4.Gestaltung
Post by: Kitty Hello on 2008-Jan-09
Aso. Events sind ja sonst eher so Programmteile, in die reingesprungen wird, wenn was von aussen passiert (z.B. "Knopf gedrückt").
Ist dein Problem jetzt klar? Geht's?
Title: Fragen zu 1.Menüablauf, 2.Bewegung, 3.Kollision, 4.Gestaltung
Post by: Visual on 2008-Jan-09
Danke, danke ... Ich hab es jetzt endlich geschafft den Ball ersteinmal in eine Richtung zu bewegen. Ich habe den Satz
QuoteWenn Du ball_x = ... zuweist, dann musst Du ball_x auch zum Zeichnen verwenden:
anfangs völlig falsch verstanden. Dann ist mir aufgefallen, dass ja in der Schleife permant Drawsprite 3,320,300 stand und dadurch der Ball eh nicht bewegt werden kann. Dann habe ich vor der Schleife halt
Code (glbasic) Select
ball_rot_x = 320
ball_rot_y = 300
eingesetzt und siehe da ... Es klappt. Jetzt versuche ich halt das Abprallen von den Wänden festzulegen.
Title: Fragen zu 1.Menüablauf, 2.Bewegung, 3.Kollision, 4.Gestaltung
Post by: Schranz0r on 2008-Jan-09
Sagte ich doch !

Quote from: Schranz0reinen Wert zuweisen:
...
DRAWSPRITE 3, x, y
da Gernot schieb:

3 konst Geschwindigkeit:
V= 1.0 // irgendein Wert:
phi = rnd(360) // Winkel der Richtung
x = x + cos(phi)*v
y = y - sin(phi)*v

deshalb hat dein Ball auch die Variablen x und y sprich : DRAWSPRITE 3,x,y
Title: Fragen zu 1.Menüablauf, 2.Bewegung, 3.Kollision, 4.Gestaltung
Post by: Visual on 2008-Jan-09
Achso meinst du das...ich dachte halt das Zeichnen des Objektes...:/