Anfängerproblem
Übersicht

YoAsakuraBetreff: Anfängerproblem |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi
Ich habe erst neulich begonnen mich mit dem programmieren zu beschäftigen daher freue ich mich über jede Antwort die aufbauende Kritik für meine stümperhaften Versuche liefert. Also folgendes Problem: Ich habe versucht einen stinknormalen 2D Shooter frei nach Bow & Arrow zu programmieren. Bisher klappte alles prima, und ich war schon wesentlich weiter als die Stelle auf die mich mein Problemchen zurückwirft. Und zwar kommt jedes mal an der Stelle, an der der Pfeil abgeschossen werden sollte die Fehlermeldung: Array index out of bounds zum Überblick: Code: [AUSKLAPPEN] Graphics 800,600 SetBuffer BackBuffer() ClsColor 0,100,25 biff = LoadImage("biff.bmp") balloon = LoadImage("balloon.bmp") bal = LoadAnimImage("ball.bmp", 32,64, 0,6) pfeil = LoadImage("pfeil.bmp") Dim pfei(100,2) Dim ball(18,2) Dim baf(18,1) HidePointer Y = 200 Repeat Cls If KeyDown(200) = 1 Then y = y - 3 If KeyDown(208) = 1 Then y = y + 3 If y < -38 Then y = -38 If y > 548 Then y = 548 DrawImageRect biff,0,y,0+bereit,0,80,140 If ball(J,0) <> -1 Then For I = 1 To 18 DrawImage balloon,ball(I,1),ball(I,2) ball(I,1) = 135 + (35*I) ball(I,2) = ball(I,2) - 1 If ball(I,2) < -64 Then ball(I,2) = 600 Next EndIf If KeyDown(203) = 1 Then bereit = 320 EndIf If KeyHit(205) And bereit = 320 Then flieg = flieg + 1 If flieg = 101 Then flieg = 1 ;irgendwo in diesem Bereich müsste pfei(flieg,0) = 1 ;das Problem liegen pfei(flieg,1) = 55 pfei(flieg,2) = Y+40 bereit = 0 EndIf For S = 1 To 100 If pfei(S,0) = 1 Then DrawImage pfeil, pfei(S,1), pfei(S,2) pfei(S,1) = pfei(S,1) + 3 If pfei(S,1) = 1000 Then pfei(S,0) = 0 EndIf Next For S = 1 To 100 If pfei(S,0) <> 0 Then For J = 1 To 18 If ImagesOverlap(balloon,ball(J,1),ball(J,2),pfeil,pfei(S,1),pfei(S,2)) Then ball(J,0) = -1 Next EndIf Next For I=1 To 18 If ball(I,0) = -1 Then If baf(I,1) + 200 < MilliSecs() Then baf(I,0) = baf(I,0) + 1 baf(I,1) = MilliSecs() If baf(I,0) = 6 Then baf(I,0) = 0 baf(I,1) = 0 ball(I,0) = 0 EndIf EndIf DrawImage bal,ball(I,1),ball(I,2),baf(I,0) EndIf Next Flip Forever WaitKey End Kann mir jemand helfen ![]() Danke im Vorraus |
||
![]() |
simi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: .... Repeat Cls If KeyDown(200) = 1 Then y = y - 3 If KeyDown(208) = 1 Then y = y + 3 If y < -38 Then y = -38 If y > 548 Then y = 548 DrawImageRect biff,0,y,0+bereit,0,80,140 If ball(J,0) <> -1 Then For I = 1 To 18 DrawImage balloon,ball(I,1),ball(I,2) ...... Dort muss der Fehler sein, denn J wird unten erhöht auf 19.... cu simi |
||
![]() |
Spikespine |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, auf den ersten Blick: wenn du die Variable flieg immer um eins erhöhst, kommst du irgendwann an die Grenze des Arrays, das ja nur 100 senkrechte einträge kennt. Edit: ach so, du setzt sie ja immer auf eins. sorry. | ||
YoAsakura |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke simi
Wenn ich das wieder raus nehme wird der Pfeil wieder geschossen. Allerdings weiß ich im Moment gerade nicht wie ich es dann hinkriege, dass die Ballons die abgeschossen wurden nicht mehr auftauchen ![]() |
||
ke^kx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du fügst einfach noch ein Eintrag pro Ballon hinzu in dem du festlegst, ob ein Ballon "lebt" oder nicht. Und dann fügst du in die Ballonschleife einfach noch ein "if Ball(i,...) = 1 then" um den rest herum.
Jiriki |
||
http://i3u8.blogspot.com
Asus Striker II Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-) Geforce 9800 GTX 2GB RAM |
noir |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
das machst du am besten so:
du speicherst jeden ball in einem array (kannst es auch mit types machen) Dim Bild(100,1) so da hätten 101 ballons platz (0-101,0) , mit (0-101,1) überprüfst du ob der ballon noch da ist. if Bild(i,1) = 0 then Drawimage Bild(i,0) .... if Bild(i,0) ..... (bild getroffen) then bild(i,1) = 1 endif so ich hoffe du hast das prinzip verstanden ![]() edit: 25s langsamer aber mehr text ![]() |
||
Fragt und man wird euch helfen
Das Alternativ BlitzBasic-Forum: FreeCoder Einfach chatten: BlitzChat Code&Text schnell und einfach pasten: FreePasting |
- Zuletzt bearbeitet von noir am So, März 06, 2005 13:08, insgesamt einmal bearbeitet
YoAsakura |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke ihr seid einfach klasse!!!!
![]() ![]() ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group