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.
Hmm?
Also, ich würde ein Feld von Schüssen machen:
DIM shots[0][2]Das ist dann [nummer][x,y].
Dann eine Funktion um einen Schuss hinzuzufügen:
FUNCTION Shoot: x,y
LOCAL m
m = BOUNDS(shots[], 0)
REDIM shots[m+1][2]
shots[m][0] = x
shots[m][1] = y
ENDFUNCTIONSo, und dann eben die Schüsse bewegen:
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
ENDFUNCTIONund dann halt anzeigen...
FUNCTION MoveShots
LOCAL i
FOR i=0 TO BOUNDS(shots[],0)-1
SPRITE st, shots[i][0], shots[i][1]
NEXT
ENDFUNCTION:booze:
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...
// 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
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.
Ä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...
// 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
ENDFUNCTIONWas 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
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
Hey, jetzt funktioniert es!
Das ich das übersehen habe...
Schrecklich!
Danke für die Hilfe!!!
Alle Probleme gelöst!!! Stelle spätestens morgen das Spiel online!!!
Danke!!!!!!