Neuanfang... und schon problem mit schussfunktion
Übersicht

![]() |
Pingu_KillerBetreff: Neuanfang... und schon problem mit schussfunktion |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
ich habe ja mal vor einem jahr mit bb angefangen. Doch ich hab es nie sehr aktiv gelernt, so das ich nur die simpelsten sachen verstant und meine schussfunktion in "Evasion" nicht verstanden habe sondern fast nur mit copy/paste..... Nun ja, nun habe ich mich noch einmal rangesetzt um es "vernünftig" zu lernen, und siehe da, die types habe ich einigermaßen verstanden. Ich habe in den letzten tagen schnell "Evasion II" angefangen, da das erste so mieserabel geproggt war. Da ich jetze immer ein ein anfänger bin kam der beitrag zu "Beginners corner". Nun ja, jetzt habe ich doch ein prob mit der schussfunktion. wenn der schuss den asteroiden trifft, soll der schuss gelöscht werden, und der asteroid wieder neu ins bild kommen. Doch der schuss geht einfach durch ihn durch. Ich bin nicht aud den fehler gekommen. (schussfunktion is in types und die gegner in dims) der code zeigt die "schuss"-function und die "enemy"-function. hier ist der Code: [AUSKLAPPEN] Function schuss() If KeyHit(57) Then bullet.shoot = New shoot bullet\x = player_x bullet\y = player_y EndIf For bullet.shoot = Each shoot DrawImage munition, bullet\x+33, bullet\y+15 If ImagesOverlap (munition, bullet\x+33,bullet\y+15,asteroid,enemy_x(i),enemy_y(i)) Then ;hier ist die abfrage Delete bullet.shoot ;kugel löschen enemy_x(i) = 800 ;x auf anfang usw.... enemy_y(i) = Rand(1,450) enemy_speed(i) = Rand(3,5) EndIf bullet\x = bullet\x + 5 If bullet\x >= 800 Then Delete bullet.shoot EndIf Next End Function ;---------------------------------------------------- Function enemy() For i = 1 To anz DrawImage asteroid, enemy_x(i), enemy_y(i) If ImagesOverlap (asteroid,enemy_x(i),enemy_y(i), player,player_x,player_y) Then frame = frame +1 enemy_x(i) = 800 enemy_y(i) = Rand(1,450) enemy_speed(i) = Rand(3,4) EndIf enemy_x(i) = enemy_x(i) - enemy_speed(i) If enemy_x(i) <= -10 Then enemy_x(i) = 800 enemy_y(i) = Rand(1,450) enemy_speed(i) = Rand(3,4) EndIf Next End Function |
||
------------------------------------------------------
Gründer und einziges Mitglied von "NoobTec Games" |
Lador |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi,
Code: [AUSKLAPPEN] For bullet.shoot = Each shoot
DrawImage munition, bullet\x+33, bullet\y+15 If ImagesOverlap (munition, bullet\x+33,bullet\y+15,asteroid,enemy_x(i),enemy_y(i)) Then ;hier ist die abfrage Delete bullet.shoot ;kugel löschen enemy_x(i) = 800 ;x auf anfang usw.... enemy_y(i) = Rand(1,450) enemy_speed(i) = Rand(3,5) EndIf bullet\x = bullet\x + 5 If bullet\x >= 800 Then Delete bullet.shoot EndIf Next End Function Ich gehe mal davon aus, dass der Fehler hier an dem "i" liegt. Du benutzt es offensichtlich als Zählvariable für die For-Schleife. Allerdings bleibt i = 0, weil du diesen Code nicht in die Zählschleife reingetan hast. Ich hoffe, dass dies das Problem ist, und dass ich dir weiterhelfen konnte. MFG Lador |
||
![]() |
Pingu_Killer |
![]() Antworten mit Zitat ![]() |
---|---|---|
erst mal vielen dank für die schnelle antwort ![]() naja, hab ich auch zuerst versucht, hab aber nur "enemy_x(i) =.... usw." dann ist mir aufgefallen, das (i) auch in der abfrage steht und hab das alles in die For schleife gesetzt. nun kommt aber die meldung "object does not exsist" ind der zeile der abfrage. hier ist der code. Code: [AUSKLAPPEN] Function schuss() If KeyHit(57) Then bullet.shoot = New shoot bullet\x = player_x bullet\y = player_y EndIf For bullet.shoot = Each shoot DrawImage munition, bullet\x+33, bullet\y+15 For i = 1 To anz ;beginn der schleife If ImagesOverlap (munition, bullet\x,bullet\y,asteroid,enemy_x(i),enemy_y(i)) Then Delete bullet.shoot enemy_x(i) = 800 enemy_y(i) = Rand(1,450) enemy_speed(i) = Rand(3,5) EndIf Next bullet\x = bullet\x + 5 If bullet\x >= 800 Then Delete bullet.shoot EndIf Next End Function |
||
------------------------------------------------------
Gründer und einziges Mitglied von "NoobTec Games" |
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mal ne dumme Frage am rand...
Warum machst du die Asteroiden nicht auch als Types ?? Wäre viel sinnvoller ^^ ![]() |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
Pingu_Killer |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich wusste das das kommt^^ die asteroiden hab ich in meinem ersten spiel als dim gemacht und. kp warum ich das wieder gemacht habe ![]() |
||
------------------------------------------------------
Gründer und einziges Mitglied von "NoobTec Games" |
Lador |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi, vllt liegt das "object does not exist" daran, dass du z.B.
Dim enemy_x(9) Dim enemy_y(9) machst, "anz" aber den Wert 10 hat. MFG Lador |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
"object does not exist" bezieht sich immer auf ein Type das nicht existiert!
Problem bei dem Code ist das bei der Colli abfrage der Type gelöscht wird und dann die Position des Types geändert werden soll, das geht natürlich nicht! Lösung: Code: [AUSKLAPPEN] If Colli then
delete Type else versetzen end if Nicht unbedingt besser aber übersichtlicher wäre eine eigene Schleife zum versetzen! |
||
[BB2D | BB3D | BB+]
|
![]() |
Pingu_Killer |
![]() Antworten mit Zitat ![]() |
---|---|---|
mhm.... meinst du, dass nach der schleife der schuss verschoben wird???
also: Code: [AUSKLAPPEN] For i = 1 To anz If ImagesOverlap (munition, bullet\x+33,bullet\y+15,asteroid,enemy_x(i),enemy_y(i)) Then Delete bullet.shoot enemy_x(i) = 800 enemy_y(i) = Rand(1,450) enemy_speed(i) = Rand(3,5) EndIf Next bullet\x = bullet\x + 5 |
||
------------------------------------------------------
Gründer und einziges Mitglied von "NoobTec Games" |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn eine colli stattfindet wird der Schuss gelöscht, danach kannst du den nicht mehr versetzten da Bullet = null ist
Code: [AUSKLAPPEN] For bullet.shoot = Each shoot
For i = 1 To anz ;beginn der schleife If ImagesOverlap (munition, bullet\x,bullet\y,asteroid,enemy_x(i),enemy_y(i)) Then Delete bullet.shoot enemy_x(i) = 800 enemy_y(i) = Rand(1,450) enemy_speed(i) = Rand(3,5) EndIf Next Next For bullet.shoot = Each shoot DrawImage munition, bullet\x+33, bullet\y+15 bullet\x = bullet\x + 5 If bullet\x >= 800 Then Delete bullet.shoot EndIf Next |
||
[BB2D | BB3D | BB+]
|
![]() |
Pingu_Killer |
![]() Antworten mit Zitat ![]() |
---|---|---|
soweit hab ich es verstanden: mit der colli wird bullet.shoot gelöscht wir daber in der for nextschleife verschoben. was natürlich nicht geht.
was ich nicht verstehe: warum wir object does not exsist in der colli angezeigt und nicht unten bei der verschiebeung? irgendwie geht das nicht. Ich versteh ja, dass nichts verschoben werden kann, was ein paar zeilen zuvor gelöscht wurde. aber wenn ich den verschiebungsbehl vor die for next schleife mit der abfrage einfüge, funzt es auch nicht. Tut mir leid, ich versuche ja das prob selbst zu lösen, damit ich es selbst verstehe, aber ich krieg das nicht hin..... |
||
------------------------------------------------------
Gründer und einziges Mitglied von "NoobTec Games" |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jetzt habe ich es gesehen, der Schuss wird gelöscht und mit dem nächsten enemy abgefragt in der ersten schleife.
Endweder die Schleifen tauschen Code: [AUSKLAPPEN] For i = 1 To anz ;beginn der schleife ;<<<<<<<<<
For bullet.shoot = Each shoot;<<<<<<<<<< If ImagesOverlap (munition, bullet\x,bullet\y,asteroid,enemy_x(i),enemy_y(i)) Then Delete bullet.shoot enemy_x(i) = 800 enemy_y(i) = Rand(1,450) enemy_speed(i) = Rand(3,5) EndIf Next Next oder mit exit die innere Schleife verlassen Code: [AUSKLAPPEN] For bullet.shoot = Each shoot
For i = 1 To anz ;beginn der schleife If ImagesOverlap (munition, bullet\x,bullet\y,asteroid,enemy_x(i),enemy_y(i)) Then Delete bullet.shoot enemy_x(i) = 800 enemy_y(i) = Rand(1,450) enemy_speed(i) = Rand(3,5) Exit ;Schleife verlassen und mit nächsten bullet.shoot weiter machen EndIf Next Next |
||
[BB2D | BB3D | BB+]
|
![]() |
Pingu_Killer |
![]() Antworten mit Zitat ![]() |
---|---|---|
ey, klasse, vielen dank ![]() das wars.... danke das du die zeit geopfert hast.... klasse!!! |
||
------------------------------------------------------
Gründer und einziges Mitglied von "NoobTec Games" |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group