kette!
Übersicht

![]() |
Tauben-RipperBetreff: kette! |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
sorry, aber ich blick da gerade ned ganz durch =(( | ||
Omenaton_2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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.) |
||
AvaGast |
![]() 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 +~ |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group