Drops erstellen (Pacman-Clone)

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

blitzblaster

Betreff: Drops erstellen (Pacman-Clone)

BeitragMo, Sep 13, 2004 17:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi @ all !

Mal eine kurze Frage, wenn ich die Punkte in 3 D erstelle und ich nicht jetzt jedesmal createsphere oder copyentity anwenden möchte würde ich diese gerne in ein Array schmeissen. Also halt ungefähr so.

Kurzform:

for drop=1 to 20
drop=createsphere(5)
next

ich würde dann die Drops per RND in den Raum werfen. Nur wie mache ich das dann mit der Collisions ?

Ich kann ja nicht dennoch jedesmal schreiben:

if entitycollided (mesh,drop) then delete drop(1) oder so ähnlich. Es soll ja für alle beim aufsammeln der gleichen Sound abgespielt werden, die Punktezahl um 5 erhört und halt jeder auch einzellt gelöscht wird, wenn er aufgesammelt ist.

Es ist so, dass ich kein Problem mit der Collisions oder sonstwas habe, mir geht es jetzt nur darum, schnell diese Punkte zu erstellen ohne Copyentity zu benutzen.

Dank im voraus !

Gruß Blitzblaster

TheProgrammer

BeitragMo, Sep 13, 2004 18:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde es mit Distance-Überprüfung machen:

erstellen:
Code: [AUSKLAPPEN]

dim drop(20)

for I = 0 to 20
 drop(I) = Createsphere(6)
 Positionentity drop(I),WAS WEIß ICH, WO
next


in der Hauptschleife:

Code: [AUSKLAPPEN]

For I = 0 to 20
 If EntityDistance(spieler,drop(I)) < sonstwas Then
  ... (Punkte, Sound, ...)
 Endif
Next
aktuelles Projekt: The last day of human being

DC

Sieger des B2D Retro Wettbewerb / Aug 04

BeitragMo, Sep 13, 2004 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstelle doch alle nur einmalig am Programmanfang. Während das Programm läuft arbeitest du dann ganze bequem mit ShowEntity und HideEntity. Dann brauchst du zur Laufzeit kein CopyEntity. Im Notfall dann eben noch ein 2. Array welches speichert ob da noch eins ist oder nicht da man leider nicht den Status abfragen kann ob es gehidet ist oder nicht.
Core i5 4670K | 4 x 3,40 GHZ | 16 GB Ram | GeForce GTX 960 | HTC Vive | Win 10 Pro
www.UnrealSoftware.de | www.StrandedOnline.de | www.CS2D.com |
www.CarnageContest.com | www.Stranded3.com
 

blitzblaster

BeitragDi, Sep 14, 2004 12:30
Antworten mit Zitat
Benutzer-Profile anzeigen
@ INpac: Tja so ist das nun mal, wenn man noch nicht mit Dim und Type gearbeitet hat. Deshalb ist ja auch CTT extrem hart gecodet. Ich mache halt eher GFX und SFX und mit Coden habe ich mich halt noch nicht so sehr beschäftigt um alle Befehle anzuwenden. Was meinst Du wohl, warum ich immer einen Coder suche. Sorry das ich nicht perfekt bin.

@ The Programmer: Danke für den Tip.

@ DC: Mal schaun was ich nun genau umsetzen werde.

Markus2

BeitragDi, Sep 14, 2004 18:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Nimm Types und Copyentity wenn die Drops eh alle gleich sind .
Bei Collision(oder Radius Prüfung)
das Handle den Entitys mit For Each in den Types
heraus suchen und dann eine Funktion zum löschen des
Types , Entity aufrufen die optional noch nen Ton abspielt und
die Punkte erhöht .
 

blitzblaster

BeitragDo, Sep 16, 2004 15:53
Antworten mit Zitat
Benutzer-Profile anzeigen
@ Markus2: Das mit dem einsammelt und das das dann auch Punkte gibt und die Drops verschinden geht ja schon alles. Mir ging es nur um eine effektive und codeschonende Art und Weise. Da ich ja bis jetzt alles Hardcore gecodet habe und das will ich endlich mal ändern. Weil sonst wieder irgendwann ein Punkt erreicht ist, wo die Übersichlichkeit nicht mehr vorhanden ist.

Gruß Blitzblaster

Thoem

Betreff: Drops erstellen

BeitragFr, Sep 17, 2004 10:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich denke, PacMan ist ein zweidimensionales Spiel(also alle Aktionen laufen in einer Ebene ab)...
Fasse doch einfach alle Drops in einem Array zusammen. Die Arrayposition ist dann ganz einfach zu berechnen:

posx=Entityx(pacman)/gittergroesse
posz=EntityZ(pacman)/gittergroesse

Im Array selber kannst Du den Mesh selber und vielleicht noch verschiedene andere Eigenschaften (z.B. Boni, spezielle Items) ablegen. Wobei das Array dann natürlich Type-basiert sein sollte.
Dann ist nur noch zu prüfen, in welchem Feld sich die Spielfigur gerade befindet, und ob an dieser Stelle ein Drops ist.


Thoem...
 

blitzblaster

BeitragFr, Sep 17, 2004 15:58
Antworten mit Zitat
Benutzer-Profile anzeigen
mein Game ist aber 3D.

Thoem

BeitragFr, Sep 17, 2004 22:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja schon, aber die Spielwelt befindet sich in einer Ebene. Also alle Drops werden doch sicherlich die gleiche Y-Position haben, oder??
Thoem...
 

blitzblaster

BeitragSa, Sep 18, 2004 12:25
Antworten mit Zitat
Benutzer-Profile anzeigen
nein eben nicht.

Thoem

BeitragSo, Sep 19, 2004 0:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay es geht auch ganz einfach:

Code: [AUSKLAPPEN]

Graphics3D 800,600,32,2
SetBuffer BackBuffer()

light=CreateLight()
TurnEntity light,45,-45,0

urdrops=CreateSphere() ; urdrops erzeugen ...
HideEntity urdrops   ; ...und verstecken

Const ktyp_drops=1 ; kollisionstypen
Const ktyp_pacman=2

Type TDrops
   Field mesh
End Type

; dropse erzeugen
For x=-10 To 10
   For y=-10 To 10
      dr.tdrops=New tdrops            ; zuerst neuen Eintrag in der Typliste
      dr\mesh=CopyMesh(urdrops)         ; urdrops kopieren
      PositionEntity dr\mesh,x*10,0,y*10   ; positionieren
      EntityType dr\mesh,ktyp_drops      ; typ vergeben ( zum drops machen :-) )
   Next   
Next

; spieler erzeugen
pacman=CreateSphere()
ScaleEntity pacman,2,2,2
EntityColor pacman,255,255,0
EntityType pacman,ktyp_pacman   ; Kollisionstyp

; kamera erzeugen
camera=CreateCamera(pacman)
CameraViewport camera,0,0,GraphicsWidth(),GraphicsHeight()
PositionEntity camera,0,25,-25
PointEntity camera,pacman
CameraClsColor camera,0,100,0

Collisions ktyp_pacman,ktyp_drops,1,1 ; kollisionen ein

Repeat
   ; bewegen
   If KeyDown(203) Then PositionEntity pacman,EntityX(pacman)-.5,EntityY(pacman),EntityZ(pacman) ; links
   If KeyDown(205) Then PositionEntity pacman,EntityX(pacman)+.5,EntityY(pacman),EntityZ(pacman) ; rechts
   If KeyDown(208) Then PositionEntity pacman,EntityX(pacman),EntityY(pacman),EntityZ(pacman)-.5 ; hoch
   If KeyDown(200) Then PositionEntity pacman,EntityX(pacman),EntityY(pacman),EntityZ(pacman)+.5 ; runter
   UpdateWorld
   RenderWorld
   ; kollision
   ek=EntityCollided(pacman,ktyp_drops) ; kollisionsentity holen
   If ek<>0
      For d.TDrops=Each TDrops
         If ek=d\mesh             ; wenn kollisionsentity mit mesh (in drops gekapselt) übereinstimmt...
            FreeEntity d\mesh       ; ... zuerst Mesh löschen ...
            Delete d            ; ... und erst DANACH den Typenfeldeintrag
         EndIf
      Next
   EndIf
   Flip
Until KeyHit(1)

End

; ANMERKUNG:

;   If ek<>0
;      For d.TDrops=Each TDrops
;         If ek=d\mesh             ; wenn kollisionsentity mit mesh (in drops gekapselt) übereinstimmt...
;            FreeEntity d\mesh       ; ... zuerst Mesh löschen ...
;            Delete d            ; ... und erst DANACH den Typenfeldeintrag
;         EndIf
;      Next
;   EndIf

; könnte auch durch :
;   If ek<>0 Then FreeEntity ek
; ersetzt werden. Dann würde das ganze auch keine Type - felder benötigen
; In diesem Fall ist es aber schwierig die verbleibenden Punkte auf dem Spielfeld
; zu löschen, wenn dies der Spieler (z.b: durch sein ableben) nicht mehr tun kann.
; Alternativ könnten die Punkte auch in einem Array gespeichert werden (aber ich HASSE arrays...)


; mfg Thoem...



Probier es.. nimm es.. erwähn mich in Deinen Credits Very Happy
Thoem...
 

blitzblaster

BeitragSo, Sep 19, 2004 11:33
Antworten mit Zitat
Benutzer-Profile anzeigen
@ Thoem: Cooles Ding, echt nett von Dir. Und Du hasst Arrays auch, alter give me 5 Laughing ....klatsch !

Gruß Blitzblaster
 

BIG BUG

BeitragSo, Sep 19, 2004 19:00
Antworten mit Zitat
Benutzer-Profile anzeigen
CopyEntity anstelle CopyMesh ist speicherschonender, da die Surfaces nicht mitkopiert werden...
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

Thoem

BeitragSo, Sep 19, 2004 22:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt, es läuft auch mit doppelter Performance...
Thoem...
 

blitzblaster

BeitragDi, Sep 21, 2004 10:15
Antworten mit Zitat
Benutzer-Profile anzeigen
@ BIG BUG: Hatte ich schon umgeändert. Vom Code habe ich 10 % übernommen, den Rest hatte ich ja schon.

@ Thoem: Danke nochmal, gelle !

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group