Drops erstellen (Pacman-Clone)
Übersicht

blitzblasterBetreff: Drops erstellen (Pacman-Clone) |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
DCSieger des B2D Retro Wettbewerb / Aug 04 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@ 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@ 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 |
||
![]() |
ThoemBetreff: Drops erstellen |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
mein Game ist aber 3D. | ||
![]() |
Thoem |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja schon, aber die Spielwelt befindet sich in einer Ebene. Also alle Drops werden doch sicherlich die gleiche Y-Position haben, oder?? | ||
Thoem... |
blitzblaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
nein eben nicht. | ||
![]() |
Thoem |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
Thoem... |
blitzblaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@ Thoem: Cooles Ding, echt nett von Dir. Und Du hasst Arrays auch, alter give me 5 ![]() Gruß Blitzblaster |
||
BIG BUG |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Stimmt, es läuft auch mit doppelter Performance... | ||
Thoem... |
blitzblaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@ BIG BUG: Hatte ich schon umgeändert. Vom Code habe ich 10 % übernommen, den Rest hatte ich ja schon.
@ Thoem: Danke nochmal, gelle ! |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group