kette!

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Tauben-Ripper

Betreff: kette!

BeitragMo, Sep 26, 2005 22:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei dem folgenden Code habe ich ein kleines Problem.
Wenn das allien schiff den playerskin berührt, soll es 5 schild abziehen, aber wenn es berührt zieht es mehr ab, weil das allienschiff nicht gleich verschwindet, sonder noch die animation abspielt und das schiff berührt(ich hoffe ich hab mich da jetzt gut ausgedrückt).

was kann ich machen das die animation dann nicht mehr als Alienschiff gezählt wird.

Code: [AUSKLAPPEN]

hinter = LoadImage("images/stars.jpg")
schiff = LoadImage("images/player.jpg")
alienbild = LoadImage("images/alien.jpg")
rakete = LoadImage("images/bullet.jpg")
explosion = LoadAnimImage("images/boom.jpg", 60,46, 0,6)
schusston = LoadSound("sound/shoot.wav")
trefferton = LoadSound("sound/boom.wav")
.......
.......
For I=1 To 100
If Rak(I,0) <> 0 Then
For J=1 To 5
If ImagesOverlap(alienbild, Alien(J,1), Alien(J,2), rakete, Rak(I,1),Rak(I,2)) Then
PlaySound(trefferton)

Alien(J,0) = -1
End If
Next
EndIf
Next


For J=1 To 5
If ImagesOverlap(alienbild, Alien(J,1), Alien(J,2), schiff, X,Y) Then
schild= schild-5
PlaySound(trefferton)

Alien(J,0) = -1
EndIf
Next

;explosieon

For I=1 To 5

If Alien(I,0) = -1 Then

If AlienExplodiert(I,1) + 100 < MilliSecs() Then
AlienExplodiert(I,0) = AlienExplodiert(I,0) + 1
AlienExplodiert(I,1) = MilliSecs()

If AlienExplodiert(I,0) = 6 Then
AlienExplodiert(I,0) = 0
AlienExplodiert(I,1) = 0
Alien(I,0) = 0
EndIf
EndIf
DrawImage explosion, Alien(I,1), Alien(I,2), AlienExplodiert(I,0)

EndIf
Next

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDi, Sep 27, 2005 1:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Logisches Beispiel:

KF=0 ; Kollisionsflag

While...

If Kollision=1 and KF=0 then KF=1:Child=Child-5
If Kollision=0 then KF=0

Wend

Artemis

BeitragDi, Sep 27, 2005 11:06
Antworten mit Zitat
Benutzer-Profile anzeigen
und auf deutsch:

du machst eine neue variable

wenn das kollidiert, machst du8 die auf true(1) und ziehst von Schild 5 ab
jetzt fragst du bei der nächste kollisionsabfrage ab, ob die variable auf true ist.
wenn ja, machst du nix, wenn nein machst du halt das abziehen und auf true stellen.

wenn keine kolli mehr da ist machst du die variable auf 0 (false)
 

Omenaton_2

BeitragDi, Sep 27, 2005 11:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du mehere Alien Schiffe haben solltest, dann sollte jedes Alien Schiff eine Variable (Type Field) haben, in dem drin steht, ob die für Kollision gültig sein soll oder gesperrt ist (weil der sich schon ein Mal kollidert hat und explodiert gerade.)

Alternativ, du könntest dieses Problem durchaus auch als einen Weg den Schildabzug zu regeln akzeptieren.
Du berücksichtigst es bewußt, daß das explodierende Alien Schiff mehrere Sekunden lang Energie abzieht. Das ist ja auch realistisch. Du solltest nur darauf achten, daß die Energieabzug in ganz kleinen Schritten unterteilt ist (zu mindest intern, nach Außen, als Anzeige kann es weiterhin nur ca. 5 sein).
Der Spieler verliert also ungefähr genausoviel Schildenergie wie ursprünglich geplant, aber dies geschieht über einen längerem Zeitraum hinweg in kleineren Schritten.
Dies hätte eventuell noch den Vorteil, daß der Spieler die Möglichkeit hätte sich geschickt aus der Explosionszone hinauszumanövrieren und so den Schaden zu reduzieren.

Tauben-Ripper

BeitragDi, Sep 27, 2005 12:20
Antworten mit Zitat
Benutzer-Profile anzeigen
sorry, aber ich blick da gerade ned ganz durch =((
 

Omenaton_2

BeitragDi, Sep 27, 2005 15:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry, aber ich denke der ganze Code so wie das ist, ist nicht so toll. Wenn du ernsthaft was machen willst, fang neu an mit Types, stat mit DIM.
Du könntest zwar im Moment das ganze noch mit einer neuen Variable hinbiegen, aber früher oder später wenn das Spiel sich weiter entwickelt bekommst du immer mehr Probleme.
Es ist wichtig, die Basis des Programmes sehr "stabil" und erweiterbar zu machen, sonst zahlt man später drauf.

Erstelle jedes Alienschiff als Type. Mach dann ein Field wo drin steht, ob dieses Schiff für den Spieler als Kollision aktuell gültig ist oder nicht. Standard mäßig wenn ein Alien erschaffen wird, ist das immer gültig. Wenn dann die Explosion beginnt und die 5 Schildenergie abgezogen wird (was nur gemacht wird, wenn dieser Variable auf Gültig gesetzt ist), wird die Variable auf ungültig gesetzt und wenn dann das Programm wieder in die Schleife kommt, wird keine Energie mehr abgezogen, weil die neue, zusätzlich eingeführte Abfrage ob das Alienschiff für Collision gültig ist auf Nein steht.


Ich habe in meinem RTS auch mit sowas zu tun. Wenn da ein Panzer zerstört wird, dauert es noch eine zeitlang bis die Explosionsanimation abgespielt wird. Sobald aber die Explosion beginnt, darf diese Kampfeinheit nicht mehr für andere Sachen berücksichtigt werden. dafür habe ich einfach einen Type Field mit "EineUnit\SchonDestroyed" Ja (1) oder Nein (0). Viele Rutinen werden nicht mehr angesprungen, wenn diese SchonDestroyed Variable auf JA gesetzt ist. So kann ich einige Rutinen weiterhin anspringen lassen (zum Beispiel Grafikdarstellung oder Hindernis für Bewegung) aber andere wie zum Beispiel Zielsuche für Gegner nicht mehr.
Bei mir ist es so, daß wenn die Explosion ganz zu Ende ist, dann gibt die Explosion-Abspiel-Rutine den Befehl zur Endgültigen Löschung der Kampfeinheit. Zur Sicherheit habe ich auch noch eine Zeitlimit Check drin, wenn mehr als 5 Sekunden um sind seit Beginn der Explosion, dann wird die Einheit auf jeden Fall gelöscht, selbst wenn sich die Explosiondarstellung wegen irgendwas hinziehen sollte. (Das war eine Bug-Umgehung.)
 

Ava

Gast

BeitragDi, Sep 27, 2005 16:13
Antworten mit Zitat
Warum trennt ihr das nicht von einander?
Ich meine: Wenn eine Einheit stirbt, wird sie gelöscht und an ihrer Stelle ein Explosionseffekt plaziert.

Das ist wahrscheinlich Geschmacksache, so wie ihr es beschrieben habt, mit der zusätzlichen StatusFlag, funktioniert es ja natürlich auch. Ich finde es nur irgendwie schöner, beides von einander zu trennen, da die Visualisierung eines vernichteten Gegners innerhalb des Programms im Regelfall ja ganz anders verwalten wird, als eine noch aktive Einheit selbst. Also nur eine einfache Animation mit Sound und/oder einem Partikeleffekt, KI-Steuerung und Bewegung und *was weis ich nicht alles* fällt ja eigentlich weg dann.

Ja, nagut, blahblup ... ich wolt mich ja nur mal mitteilen. *g* 8)


~+ Ava +~

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group