Entity drehungen und platzierungen auf pseudotilemap
Übersicht

InsoBetreff: Entity drehungen und platzierungen auf pseudotilemap |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo!
Ich hab jetzt das Thema Tilemap erstmal aufgegeben um mich an etwas einfacheres zu wagen, was in etwa meiner bisherigen Spielidee entspricht, nur mit weniger Freiheiten. Also ich hab eine große map(b3d format), die absolut eben ist. Die breite und länge der map kann man durch 32 teilen, was im endeffekt dann ein "tile" ist, also 32x32. Der spieler soll items aus seinem inventar(z.B. ein Zaun(32x[y]x32) in diesem Beispiel) aufstellen können. Also, soll er erst das Item auswählen, dann klicken, dann erscheint es durchsichtig vor dem Spieler, soll sich aber nicht mit drehen, dieser Zaun soll sich jetzt quasi genau auf eines dieser pseudotiles begeben, und wenn sich der spieler dreht, nicht mit drehen, sonder starr immer in die selbe richtung schauen, bis der spieler den zaun von hand um je 45° weiter dreht. nun hab ich mir einen kleinen code geschrieben um erstmal den Zaun frei in der welt platzieren zu können, aber so richtig funktionieren.. will das ganze nicht. Ich hoffe ihr könnt mir helfen, mir meine Fehler zeigen und vielleicht ein Paar Denkanstöße geben ![]() Code: [AUSKLAPPEN] Function bauen()
CameraPick camera_player,MouseX(),MouseY() If zaunbauen1= 0 If MouseHit(1) zaun.Tobjekte = New Tobjekte zaun\mesh = LoadMesh("data/meshes/fence.b3d") zaun\id = id PositionEntity zaun\mesh,PickedX(),1,EntityZ(player)+32 EntityParent zaun\mesh,player EntityAlpha zaun\mesh,0.4 zaunbauen1=1 EndIf For zaun.Tobjekte = Each Tobjekte If zaun\id = id PositionEntity zaun\mesh,PickedX(),1,EntityZ(player)+32 EndIf Next EndIf If zaunbauen1=1 If MouseHit(1) zaunbauen1=0 For zaun.Tobjekte = Each Tobjekte If zaun\id = id FreeEntity zaun\mesh zaun.Tobjekte=New Tobjekte zaun\mesh = LoadMesh("data/meshes/fence.b3d") zaun\id = id id = id +1 CameraPick camera_player,MouseX(),MouseY() PositionEntity zaun\mesh,PickedX(),1,EntityZ(player)+32 EndIf Next EndIf EndIf |
||
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wieso hast du nicht ein globales Zaun-Mesh, das du dann immer wieder mit CopyEntity![]() Hilft natürlich nicht, ist aber wichtig zu beachten. Außerdem sehe ich es so, dass du den noch zu bauenden Zaun anhand einer id identifizierst (wohl eine globale Variable - besser als Parameter). Diese Suchschleifen kannst du umgehen, wenn du einfach den zu bauenden Zaun in einer globalen Variable speicherst. Eine Frage: Was genau willst du bewirken, wenn zaunbauen=1 und MouseHit(1)? So wie ich das sehe, löschst du erst den Mesh, lässt das Objekt aber leben (kein Delete ![]() ZEVS |
||
Inso |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hey, danke dir erstmal fürs Antworten =)
ZEVS hat Folgendes geschrieben: Wieso hast du nicht ein globales Zaun-Mesh, das du dann immer wieder mit CopyEntity
![]() Weil die komplette Funktion nur irgendwie dahin "geschustert" wurde, und 100mal verändert wurde, im endeffekt gehts mir in bei der Funktion nur darum, wie ich am besten meine zu bauenden objekte in der map platzieren kann, die funktion wird dann bis auf die platzierung der objekte verworfen und komplett neu geschrieben, weil ich ja nicht nur zäune bauen können will ![]() ZEVS hat Folgendes geschrieben: Außerdem sehe ich es so, dass du den noch zu bauenden Zaun anhand einer id identifizierst (wohl eine globale Variable - besser als Parameter). Diese Suchschleifen kannst du umgehen, wenn du einfach den zu bauenden Zaun in einer globalen Variable speicherst. Wie genau meinst du das? Momentan ist es halt so, dass ich wie du schon sagst, eine globale variable hab "id", die sich mit jedem gebauten objekt erhöht, beim bauen des objektes wird dem field id im typ Tobjekte die jeweilige id zugewiesen, damit ich die gebauten objekte irgendwie wieder identifizieren kann(wird dann noch erweitert auf oId(objekt ID, was für eine Art objekt ist es?) ZEVS hat Folgendes geschrieben: Eine Frage: Was genau willst du bewirken, wenn zaunbauen=1 und MouseHit(1)? So wie ich das sehe, löschst du erst den Mesh, lässt das Objekt aber leben (kein Delete ![]() Das liegt daran dass vorher beim ersten mousehit der playerpivot dem zaun als parent zugewiesen wurde und ich leider keine ahnung habe wie ich diese parent verbindung wieder auflöse, aber wie oben gesagt, die funktion ist nur provisorisch, geht mir nur um die platzierung von objekten auf meiner pseudotilemap ![]() |
||
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das mit der globalen Variable stelle ich mir so vor:
BlitzBasic: [AUSKLAPPEN] Global buildFence.Tobjekte Beim Erzeugen des Zaunes setzt du die Variable einfach hier ein; beim Verarbeiten des Bauens liest du hier wieder aus. Das spart diese Suchschleifen. Wenn der zu bauende Zaun aber sowieso an letzter Stelle steht, sollte es auch Last ![]() Ein wertvoller Link: EntityParent ![]() ZEVS |
||
Inso |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hey nochmal, hab das ganze jetzt erstmal so gelöst:
CameraPick camera_player,MouseX(),MouseY() zwischenspeicherx = PickedX() / 32 zwischenspeicherz = (PickedZ() / 32) die beiden variablen sind als INT deklariert, danach wird das ganze nochmal * 32 genommen und schon hab ich mein "tile". funktioniert^^ |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group