Aussetzer

Previous topic - Next topic

WPShadow

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.
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

Kitty Hello

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:

WPShadow

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
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

Kitty Hello

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.

WPShadow

Ä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
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

BumbleBee

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
The day will come...

CPU Intel(R) Core(TM) i5-3570k, 3.4GHz, AMD Radeon 7800 , 8 GB RAM, Windows 10 Home 64Bit

WPShadow

Hey, jetzt funktioniert es!

Das ich das übersehen habe...

Schrecklich!

Danke für die Hilfe!!!
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

WPShadow

Alle Probleme gelöst!!! Stelle spätestens morgen das Spiel online!!!

Danke!!!!!!
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est