Gegner löschen wenn sie aus der Map fallen...

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

orpheus_2003

Betreff: Gegner löschen wenn sie aus der Map fallen...

BeitragDi, März 24, 2009 23:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi.

Ich hab ein Problem bei "Wizard"

Meine Gegner setzte ich aus einer Map in den Level:

Code: [AUSKLAPPEN]
Function enemyappearing()
   Y = 0: Repeat
   X = 0: Repeat
         X1 = MapX + X : Y1 = MapY + Y
               If Enemy$(X1,Y1) = "1DR" And Enemysprite(X,Y,3)=0 Then  Enemy$(X1,Y1) = "000" : Enemysprite(X,Y,1)= X * 32 + MapOffsetX : Enemysprite(X,Y,2)= Y * 32 + MapOffsetY : Enemysprite(X,Y,3)=1 : Enemysprite(X,Y,4)=100       
            If Enemy$(X1,Y1) = "1DQ" And Enemysprite(X,Y,3)=0 Then  Enemy$(X1,Y1) = "000" : Enemysprite(X,Y,1)= X * 32 + MapOffsetX : Enemysprite(X,Y,2)= Y * 32 + MapOffsetY : Enemysprite(X,Y,3)=2 : Enemysprite(X,Y,4)=100 : Enemysprite(X,Y,5)=1       
         X = X + 1: Until X = 26
         Y = Y + 1: Until Y = 20
End Function


So.
Nun will ich nicht, dass wenn ich vorbeilaufe die im Speicher rumwuseln.
Wie setzt ich die zurück. Momentan habe ich sie einfach an den Ursprung gesetzt. Sieht aber blöde aus.
Ich hab dann einfach Probleme sie auf die Map an die richtige Position zu setzen.
Hab da ein Offset und es will einfach nicht klappen.

Map scrollt so:

Code: [AUSKLAPPEN]
If CharacterX > 372 Then
      If MapX < MapWidth-20 Then
         MapOffsetX = MapOffsetX - 4                 ; Offset for Map
         OffsetX = OffsetX - 2                     ; Offset for Layer 2 scrolling
         enemyoffsetx= -4 : moveenemyx() ; Enemy
         CharacterX = 372
         If MapOffsetX < -30 Then                   ; Map border
         If Mapx<174 Then
            MapOffsetX = 0                         ; Offset to 0
            MapX = MapX + 1   
         End If
         EndIf
      End If
   End If


Hat jemand ne Idee?
Enemie:
; Enemysprite xPos,yPos,Enemy?,life,direction

Die Gegner bewegen sich selbstständig. Der erste einfach hin und her x achse.
Der 2 hat Intelligenz.. Smile Prallt am Tileset ab und dreht...

Thx
GazerStar - the beginning
http://gazerstar.lexigame.de/
Wizard (Worktitel)
http://wizard.lexigame.de

orpheus_2003

Betreff: Hm

BeitragDo, März 26, 2009 8:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist dieses Thema so kompliziert oder so einfach?

Würde mich jetzt schon interessieren. Rolling Eyes
GazerStar - the beginning
http://gazerstar.lexigame.de/
Wizard (Worktitel)
http://wizard.lexigame.de

ozzi789

BeitragDo, März 26, 2009 8:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Alles mit der Ruhe Wink

Ich komm bei deinem Code nicht ganz draus..
Verwaltest du die Dinger als Type?

Wenn du sie als Type verwendest kannst du sie ganz einfach per Delete, die gewünschte Instanz löschen Very Happy

Falls ich dich falsch verstanden habe, sry
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

orpheus_2003

BeitragDo, März 26, 2009 8:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi.

Die Enemys sind Dim Felder. (nicht schlagen...)
Ich bin mit Types noch nicht so durch....

Und das Problem ist das Offset. Das Level wird ja gescrollt mit dem Offset.
Wenn der dann 32 übersteigt geht die Map um 1 weiter....

Das Problem ist. Wenn ich die Gegner lösche, wenn sie aus dem Screen raus sind, setzte ich sie an
die Ursprungsvaribalen, die ich beim ersteleln mit speichere.
Enemysprite(X,Y,6)=X1 : Enemysprite(X,Y,7)=Y1

Allerdings kommen die dann eben wieder am Ursprung und nicht an der Stelle an der sie verschwanden.

Jetzt könnte man sagen. Einfach. Speichere die Bewegung des Levels und übernimm diese.
Tja. Das hab ich probiert. Geht nicht.

So sieht der Mapcontroll aus:


Code: [AUSKLAPPEN]
   If CharacterX > 372 Then
      If MapX < MapWidth-20 Then
         MapOffsetX = MapOffsetX - 4                 ; Offset for Map
         OffsetX = OffsetX - 2                     ; Offset for Layer 2 scrolling
         enemyoffsetx= -4 : moveenemyx() ; Enemy
         CharacterX = 372
         If MapOffsetX < -30 Then                   ; Map border
         If Mapx<174 Then
            MapOffsetX = 0                         ; Offset to 0
            MapX = MapX + 1   
            enemyoffsetxmap=1 : moveenemyXmap()          ; Enemy
         End If
         EndIf
      End If
   End If


Und so die Funktion um die recoverten Variablen dann mitzuscrollen:

Code: [AUSKLAPPEN]
Function moveenemyXmap()
Y = 0: Repeat
X = 0: Repeat
   Enemysprite(X,Y,6)=Enemysprite(X,Y,6)+enemyoffsetxmap
X = X + 1: Until X = 26
Y = Y + 1: Until Y = 20
End Function
GazerStar - the beginning
http://gazerstar.lexigame.de/
Wizard (Worktitel)
http://wizard.lexigame.de

ozzi789

BeitragDo, März 26, 2009 9:03
Antworten mit Zitat
Benutzer-Profile anzeigen
*dich hau* Wink

Ne..
Wie lädst du die Gegner?
(wehe alles hardgecodet Evil or Very Mad )

Bitte eigne dir Types an..
Wenn du die kannst, würde ich so angehen

Verschiedene Maps bauen, eine für das Grafische, eine mit den Objekten/Gegnern
Nun schreibst du eine Funktion, welche die 2te map abcheckt und wenn ein Objekt sichtbar ist ein Type erstellt.

Hoffentlich verständlich Wink
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

orpheus_2003

BeitragDo, März 26, 2009 11:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey. Sicher hab ich ne Map.

1 Map Level
2 Map Background
3 Map Enemies.

Und diese werden in das DIM Feld eingelesen....... Fertig.
Wenn die Map dann scrollt werden beim setzen der Tiles auch abgefragt, ob Enemies auf dem Layer sind.
Wenn ja. Funktion oben... erstellen Gegner...


Das Problem mit dem Rücksetzen hätte ich bei Types auch....!???

Und. Bitte nicht hauen.... Razz
GazerStar - the beginning
http://gazerstar.lexigame.de/
Wizard (Worktitel)
http://wizard.lexigame.de

ozzi789

BeitragDo, März 26, 2009 12:33
Antworten mit Zitat
Benutzer-Profile anzeigen
ahaa

bei den types würd ich die instanz löschen und wenns sein muss neu erstellen.
egal zu deinem problem mit dem Offset, es tut mir leid, aber ich begreiff deinen code noch nicht so ganz...
wenn der screen fertig ist wird MapX um eins grösser/kleiner

nun positionierst du die dinger wo (codezeile?)

sry ich blick nicht durch Very Happy



schau dir mal mein Seafighter an
https://www.blitzforum.de/upload/file.php?id=4326
da ist ein Soruce drinn, vlt kannst du dir was abschauen Wink
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Noobody

BeitragDo, März 26, 2009 14:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich verstehe nicht ganz, warum du die Gegner überhaupt aus der Karte löschst.
Wenn du sowieso Arrays statt Types benutzt, nehmen dir die Gegner ja überhaupt keinen Speicher weg, solange sie noch in der Map sind.
Es reicht also, wenn du einfach die Gegner aktualisierst, die momentan auf dem Bildschirm zu sehen sind, dann schlucken sie auch keine Berechnungszeit.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun

orpheus_2003

BeitragDo, März 26, 2009 14:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry. Doppelpost
GazerStar - the beginning
http://gazerstar.lexigame.de/
Wizard (Worktitel)
http://wizard.lexigame.de
  • Zuletzt bearbeitet von orpheus_2003 am Do, März 26, 2009 14:31, insgesamt einmal bearbeitet

orpheus_2003

BeitragDo, März 26, 2009 14:30
Antworten mit Zitat
Benutzer-Profile anzeigen
@ Noobody

Dass mir die Gegner keinen Speicher nehmen, weil sie eh alle "gefüllt" sind ist klar.
Aber.

Ich will nur die zeichnen die auf dem Screen sind.
Momentan wird die Map aktuell abgefragt ob da Gegner sind, wenn ja. Werden die Variablen für die Gegner geladen. x,y usw.
Aber wenn ich dann aus dem Screen raus bin laufen die immer noch rum. Darum muss ich sie löschen..
Damit sie nicht außerhalb der Map gezeichnet werden.

Aber dank Nobody hab ich nun eine Lösung gefunden.
Ich begrenze einfach nur die Graphikfunktion der Gegner. Dann werden die auch nicht gezeichnet und
brauchen keinen Speicher. Und sind immer am richtigen Ort.

Thx...
GazerStar - the beginning
http://gazerstar.lexigame.de/
Wizard (Worktitel)
http://wizard.lexigame.de

orpheus_2003

BeitragDo, März 26, 2009 16:14
Antworten mit Zitat
Benutzer-Profile anzeigen
ozzi789 hat Folgendes geschrieben:

schau dir mal mein Seafighter an
https://www.blitzforum.de/upload/file.php?id=4326
da ist ein Soruce drinn, vlt kannst du dir was abschauen Wink


Mensch Ozzi.

Weißt wen man hauen sollte....?
Dein Code ist doch etwas. Wie sag ich. Unübersichtlich????
GazerStar - the beginning
http://gazerstar.lexigame.de/
Wizard (Worktitel)
http://wizard.lexigame.de

BladeRunner

Moderator

BeitragDo, März 26, 2009 16:16
Antworten mit Zitat
Benutzer-Profile anzeigen
orpheus, ich möchte Dich auf den Editbutton hinweisen. Nutze ihn bitte. Danke.
Doppelpostings sind nicht gern gesehen in diesen heiligen Hallen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

ozzi789

BeitragDo, März 26, 2009 19:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Es war ein BCC wo man auf die Codelänge achten muss ...
Bitte poste den ganzen Code, ich kann dir sonst nicht wirklich weiter helfen, thnx

Kann leider kein Sample coden, weil mein BB total rumzickt Evil or Very Mad
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group