GLBasic forum

Other languages => GLBasic - de => Topic started by: WPShadow on 2006-Jun-29

Title: Aussetzer
Post by: WPShadow on 2006-Jun-29
Hi!

Mein Kopf ist im Augenblick nicht dort, wo er sein sollte.

Nehmen wir an mein Raumschiff ist auf der Position posx, 400 und ich möchte einen Schuss abgeben, der sich mit der fixen Richtung posx, 400 - y bewegt...

Wie übergebe ich am Besten an den Schuss, ohne daß er mir immer wieder posx mit übergibt???

War ein langer Tag und ich bin einfach nur mehr verzweifelt...

GLG

W.
Title: Aussetzer
Post by: Kitty Hello on 2006-Jun-30
Hmm?
Also, ich würde ein Feld von Schüssen machen:
Code (glbasic) Select
DIM shots[0][2]Das ist dann [nummer][x,y].
Dann eine Funktion um einen Schuss hinzuzufügen:
Code (glbasic) Select
FUNCTION Shoot: x,y
LOCAL m
   m = BOUNDS(shots[], 0)
   REDIM shots[m+1][2]
   shots[m][0] = x
   shots[m][1] = y
ENDFUNCTION
So, und dann eben die Schüsse bewegen:
Code (glbasic) Select
FUNCTION MoveShots
LOCAL i
   FOR i=0 TO BOUNDS(shots[],0)-1
      DEC shots[i][1]
      // wenn er oben rausfliegt, wegmachen
      IF shots[i][1] < 0 THEN DIMDEL shots[], i
   NEXT
ENDFUNCTION
und dann halt anzeigen...
Code (glbasic) Select
FUNCTION MoveShots
LOCAL i
   FOR i=0 TO BOUNDS(shots[],0)-1
      SPRITE st, shots[i][0], shots[i][1]
   NEXT
ENDFUNCTION
:booze:
Title: Aussetzer
Post by: WPShadow on 2006-Jun-30
Also soweit bin ich. Aber irgendwie bekomme ich das mit dem einbinden nicht ganz hin. Ich glaube es hackt irgendwo bei meiner Denkweise...

Noch eine Frage: Wie mache ich das mit der Collisionsabfrage bei den Gegnern am Besten? Im Prinzip habe ich dann ja irgendwie die Schussposition, wenn ich mich nicht irre...



Code (glbasic) Select
// Ladebereich
Hintergrund = RND(4) + 1

IF Hintergrund = 1 THEN LOADSPRITE "1.bmp", 0
IF Hintergrund = 2 THEN LOADSPRITE "2.bmp", 0
IF Hintergrund = 3 THEN LOADSPRITE "3.bmp", 0
IF Hintergrund = 4 THEN LOADSPRITE "4.bmp", 0
IF Hintergrund = 5 THEN LOADSPRITE "5.bmp", 0



LOADSPRITE "ship.bmp", 1
LOADSPRITE "schuss.bmp", 2



GLOBAL a, b, y, posx

// Startposition
posx = 320
// Hauptloop
WHILE TRUE


y = y + 10
IF y > 255 THEN y = 0
// Hintergrund
FOR b = -1 TO 2
FOR a = 0 TO 2
SPRITE 0, 0 + (a * 256), y + (b * 256)
NEXT
NEXT

SPRITE 1, posx, 400

// Schusstimer

scht = scht + GT



IF KEY(57) = 1 AND scht > 0.125
// Schuss abgeben

scht = 0
ENDIF



IF KEY(203) = 1 THEN posx = posx - 5
IF KEY(205) = 1 THEN posx = posx + 5

IF posx <= 0 THEN posx = 0
IF posx >= 600 THEN posx = 600
PRINT Hintergrund, 0, 0


    //GAME_TIMER
    GT=(GETTIMERALL()-Old_Timer)/1000  
    Old_Timer=GETTIMERALL()


SHOWSCREEN

WEND


KEYWAIT







FUNCTION Shoot: x,y
LOCAL m
   m = BOUNDS(shots[], 0)
   REDIM shots[m+1][2]
   shots[m][0] = x
   shots[m][1] = y
ENDFUNCTION


FUNCTION MoveShots:
LOCAL i
   FOR i=0 TO BOUNDS(shots[],0)-1
      //DEC shots[i][1]
      // wenn er oben rausfliegt, wegmachen
      IF shots[i][1] < 0 THEN DIMDEL shots[], i
   NEXT
ENDFUNCTION

FUNCTION showShots:
LOCAL i
   FOR i=0 TO BOUNDS(shots[],0)-1
      SPRITE st, shots[i][0], shots[i][1]
   NEXT
ENDFUNCTION
Title: Aussetzer
Post by: Kitty Hello on 2006-Jun-30
Code (glbasic) Select
IF KEY(57) = 1 AND scht > 1
// Schuss abgeben
Shoot(posx, 400)
    scht = 0
ENDIF
MoveShots()
showShots()
und den DEC nicht vergessen ,sonst bewegt sich nix.
Title: Aussetzer
Post by: WPShadow on 2006-Jun-30
Äh... irgendwie haut das nicht hin...

"Lost Revenant Mini.gbas"(93) error : wrong number or aguments : "DEC" called with 1 args. Desired: 2

Und ich weiß nicht genau, was ich bei DEC eintragen muß!

Als einziges habe ich das Sprite übernommen, das den Schuss darstellen soll...

Ansonsten bin ich am Verzweifeln...

Code (glbasic) Select
// Ladebereich
Hintergrund = RND(4) + 1

IF Hintergrund = 1 THEN LOADSPRITE "1.bmp", 0
IF Hintergrund = 2 THEN LOADSPRITE "2.bmp", 0
IF Hintergrund = 3 THEN LOADSPRITE "3.bmp", 0
IF Hintergrund = 4 THEN LOADSPRITE "4.bmp", 0
IF Hintergrund = 5 THEN LOADSPRITE "5.bmp", 0

//LOADSPRITE "extrem.bmp", 0

LOADSPRITE "ship.bmp", 1
LOADSPRITE "sch.bmp", 2



GLOBAL a, b, y, posx

// Startposition
posx = 320
// Hauptloop
WHILE TRUE


y = y + 10
IF y > 255 THEN y = 0
// Hintergrund
FOR b = -1 TO 2
FOR a = 0 TO 2
SPRITE 0, 0 + (a * 256), y + (b * 256)
NEXT
NEXT

SPRITE 1, posx, 400

// Schusstimer

scht = scht + GT



IF KEY(57) = 1 AND scht > 0.125
Shoot(posx, 400)

scht = 0
ENDIF



IF KEY(203) = 1 THEN posx = posx - 5
IF KEY(205) = 1 THEN posx = posx + 5

IF posx <= 0 THEN posx = 0
IF posx >= 600 THEN posx = 600
PRINT Hintergrund, 0, 0


    //GAME_TIMER
    GT=(GETTIMERALL()-Old_Timer)/1000  //Durch Tausend für die Sekunden
    Old_Timer=GETTIMERALL()

MoveShots()

showShots()


SHOWSCREEN

WEND


KEYWAIT







FUNCTION Shoot: x,y
LOCAL m
   m = BOUNDS(shots[], 0)
   REDIM shots[m+1][2]
   shots[m][0] = x
   shots[m][1] = y
ENDFUNCTION


FUNCTION MoveShots:
LOCAL i
   FOR i=0 TO BOUNDS(shots[],0)-1
      DEC shots[i] [1], 1
      // wenn er oben rausfliegt, wegmachen
      IF shots[i][1] < 0 THEN DIMDEL shots[], i
   NEXT
ENDFUNCTION

FUNCTION showShots:
LOCAL i
   FOR i=0 TO BOUNDS(shots[],0)-1
      SPRITE 2, shots[i][0], shots[i][1]
   NEXT
ENDFUNCTION
Was mache ich falsch? Der Schuss bleibt wo er ist!!!

Anbei:

compiling:
C:\Programme\GLBasic\Compiler\platform\gpc_temp0.cpp: In function `DGInt __GLBASIC__::MoveShots()':
C:\Programme\GLBasic\Compiler\platform\gpc_temp0.cpp:89: error: `(&__GLBASIC__::shots)->__GLBASIC__::DGIntArray::operator()(i, 0.0, 0.0, 0.0)' cannot be used as a function
Title: Aussetzer
Post by: BumbleBee on 2006-Jun-30
Hallo WPShadow


In der Zeile
 DEC shots [1], 1

ist eine Leerstelle
Das mag der Compiler wohl nicht

So müsste es gehen
 
 DEC shots[1], 1


Cheers
Title: Aussetzer
Post by: WPShadow on 2006-Jun-30
Hey, jetzt funktioniert es!

Das ich das übersehen habe...

Schrecklich!

Danke für die Hilfe!!!
Title: Aussetzer
Post by: WPShadow on 2006-Jun-30
Alle Probleme gelöst!!! Stelle spätestens morgen das Spiel online!!!

Danke!!!!!!