Types und 3D-Objekte
Übersicht

PacManiBetreff: Types und 3D-Objekte |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
habe mir MIDI-Masters supertolles Type-Tutorial durchgelesen und jetzt auch einen Durchblick ![]() Allerdings gibt es da ein paar Dinge bei denen ich einfach nicht weiter weiß. In der 2D-Welt kann man ja Types von z.B. Monstern einfach mit For-Next durchlaufen und jedes Monster mit DrawImage dahin zeichnen wo es laut Monster\X und Monster\Y hingehört, da DrawImage sozusagen Bilder "kopiert", also bereits gezeichnete Bilder ja nicht löscht während das nächste Monster gemalt wird. In der 3D habe ich hier ein Modell für eine Münze, die es einzusammeln gilt. Alle Münzen werden in einem Type mit X, Y und Z-Koordinate gespeichert. Diese werden beim Laden eines Levels initialisiert. Nachdem das getan wurde, will ich mit For-Next alle Münzen im Münzen-Typ durchlaufen und sie dann nach den zugehörigen Koordinaten tatsächlich auf dem Spielfeld platzieren. Das mache ich mit PositionEntity MünzenMesh, Münze\X, Münze\Y, Münze\Z (Pseudo-Code). MünzenMesh wurde zuvor mit dem Münzen.3ds-Modell initialisiert. Allerdings verschiebe ich damit natürlich ständig nur das eine Münzen.3ds-Modell, da es ja im Gegensatz zur 2D-Welt nicht kopiert wird... muss ich dann für jede meiner Münzen das gleiche Modell nochmal laden oder kann ich irgendwie Verweise auf dieses Modell machen (Frage der Speicherauslastung sei hier gestellt), und wenn nochmal laden, wie soll ich das in den Type speichern? Bin grad etwas verwirrt, hoffentlich versteht ihr mich ![]() Derzeit sieht es so aus, habe schon etwas probiert: Code: [AUSKLAPPEN] Type TLucci Field Mesh Field X%, Y%, Z% End Type Global NLucci.TLucci Function LadeLuccis() ;[...] NLucci = New TLucci NLucci\Mesh = LoadMesh("models\items\TLucci.3ds") NLucci\X = ValueX ;die habe NLucci\Y = ValueY ;ich davor NLucci\Z = ValueZ ;berechnet PositionEntity NLucci\Mesh, NLucci\X, NLucci\Y, NLucci\Z End Function |
||
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kopiere das Münzen-Mesh jedes mal mit CopyEntity![]() ![]() |
||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
CopyEntity![]() (versteckte Objekte laden, für Type-Instanzen kopieren und den Kopie-Handle natürlich in der Type-Instanz speichern.) mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Aber wie positioniere ich jetzt das zuerst geladene Mesh mit
Global MLucci = LoadMesh("models\items\TLucci.3ds") was ich ja für die CopyEntities benutze? Das wird ja von alleine auf 0,0,0 gesetzt und ist somit im Weg. Derzeit sieht's so aus: Code: [AUSKLAPPEN] Global MLucci = LoadMesh("models\items\TLucci.3ds")
NLucci = New TLucci NLucci\Mesh = CopyEntity(MLucci) PositionEntity NLucci\Mesh, ValueX, ValueY, ValueZ |
||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
HideEntity![]() Das macht zwei Dinge: 1. Das Objekt wird unsichtbar. 2. Das Objekt wird von den Kollisionen ausgeschlossen. ->Da steht nichts im Weg. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich wusste nicht, dass es auch Kollisionen verbietet! Das hätte mir später bestimmt Probleme bereitet.
Vielen Dank an euch beide, das wäre hiermit erledigt ![]() |
||
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jetzt habe ich ein neues Problem:
Sobald ein Spieler eine Münze berührt, will ich sie jetzt der Einfachheit halber nur löschen und somit vom Spielfeld entfernen. Dazu nutze ich folgenden Code (Kollisionen treten richtig auf): Code: [AUSKLAPPEN] If EntityCollided(Player, LucciCollisions) Then
NLucci = New TLucci For NLucci = Each TLucci If EntityCollided(NLucci\Mesh, PlayerCollisions) Then Delete NLucci Next End If Allerdings zickt er, sobald ich eine Münze berühre, rum, dass die Entity NLucci\Mesh nicht existiere, obwohl ich sie anfangs korrekt beTypen und rotieren konnte wie hier zu sehen ist: Code: [AUSKLAPPEN] NLucci = New TLucci
NLucci\Mesh = CopyEntity(MLucci) EntityType NLucci\Mesh, LucciCollisions PositionEntity NLucci\Mesh, ValueX, ValueY, ValueZ RotateEntity NLucci\Mesh, 0, Rand(0,360), 0 |
||
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] NLucci = New TLucci
Hier erstellst du vor dem Durchgehen aller Types einen neuen Type. Bei diesem ist das Mesh natürlich 0, mach das raus ![]() |
||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das habe ich jetzt getan, aber jetzt erkennt er beim Durchlaufen garkeine Kollision mehr. | ||
![]() |
Megamag |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Problem kann sein, dass du nach deiner Kollisionsabfrage noch auf dein Mesh zugreifen willst. Da dieses gelöscht wurde kann Blitz3D aber nicht mehr darauf zugreifen und "zickt rum". Die Kollisionsfrage oder bzw. der Löschbefehl muss am Ende deiner Schleife geschrieben werden, sodass danach nichts mehr kommt, was das Mesh benötigt. | ||
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das Problem mit dem Zugriff hatten wir ja bereits behoben, was an NLucci = New TLucci lag.
Ich habe meinen Code mal vereinfacht: Code: [AUSKLAPPEN] For NLucci = Each TLucci
If EntityCollided(NLucci\Mesh, PlayerCollisions) Then HideEntity NLucci\Mesh Next Der wird jedesmal in der Hauptschleife durchgelaufen, er kommt auch in die For Each-Schleife, aber eine Kollision mit einer Münze (Lucci) erkennt er nie, weshalb HideEntity nie auftritt ![]() |
||
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mach die Kollision anders, am Besten so:
BlitzBasic: [AUSKLAPPEN] Local collided = EntityCollided(Player, LucciCollisions) Siehe dazu EntityCollided ![]() |
||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jap, das geht ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group