Ganz bestimmtes Type löschen?
Übersicht

![]() |
GizehBetreff: Ganz bestimmtes Type löschen? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Ihr Lieben ![]() Ich suche Hilfe ![]() D.h. auch wenn ich nach dem Setzen eines Tiles schon zig andere gesetzt habe, und erst dann das alte wieder löschen möchte (z.B. mit erneutem darauf klicken, und intern mit Delete) - wie greife ich exakt darauf zu? Bekannt sind für jedes Tile (für jeden erstellten Type) dessen Position (Spalte und Reihe - also beispielsweise Selected\col und Selected\row) - kann mir das irgendwie helfen, auf das spezielle Type zuzugreifen und es gezielt zu löschen? Eine Möglichkeit, die mir einfällt wäre höchstens, bei jedem Setzen eines Tiles im Editor eine Zähl-Variable mitlaufen zu lassen - und dann bei einem Löschen die entsprechende Anzahl mit Before durch die Types zurückzugehen, und so dann auf das entsprechende und zu löschende zuzugreifen - aber das scheint mir unelegant? Falls ich ganz und gar auf dem Holzweg sein sollte, wäre ich in dem Falle auch froh über generelle Tipps, wie man in einem Tile-Editor gesetzte Tiles am elegantesten wieder löschen kann (optisch sowie speichermäßig). Gruß! ![]() |
||
- Zuletzt bearbeitet von Gizeh am Mi, Nov 08, 2006 15:49, insgesamt einmal bearbeitet
![]() |
BlitzcoderNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du kannst ja mir Before, After, Last etc. die Types durchgehen. Am einfachsten mit For each (siehe Onlinehilfe) . Falls du einzelne Felder löschen willst, das geht nicht. Du kannst sie nur auf 0 setzten. Löschen geht so:
Code: [AUSKLAPPEN] type Ttile field x,y End Type for tmp.Ttile = each Ttile if tmp\x=10 and tmp\y=13 then delete tmp next Evtl. musst du dann natürlich die umliegenden Tiles umsetzten, z.B. alle darunter eins hoch setzten. Dazu kannst du noch eine schleife setzten, die dann alle Tiles, bei denen x=10 und y>13 eins nach oben setzten. |
||
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________ |°°°°°°°°°°°°°°||'""|""\__,_ |______________ ||__ |__|__ |) |(@) |(@)"""**|(@)(@)****|(@) |
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hoi,
also wenn Du ne 2D-Tilemap hast, wo nur x und y der Tiles gespeichert ist, hätt ich auf Types verzichtet und ein Dimfeld benutzt: dim level(100,100) global bombe = 12 global spieler = 20 global wand = 33 die einzelnen tiles würden dann so aussehn: level (20,15) = wand level (20,16) = wand level (20,17) = wand level (90,15) = spieler Zu den Types: Da ja Selected\col und Selected\row bekannt ist, musst Du per Schleife alle Types durchgehn und auf Übereinstimmung checken. L8er, PSY (edit) muh. Blitzcoder war schneller. Sollte sich Blitzposter nennen ![]() |
||
![]() |
Gizeh |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() Danke für den Denkanstoss! Ja, das war genau das, was ich suchte ![]() Zitat: for tmp.Ttile = each Ttile if tmp\x=10 and tmp\y=13 then delete tmp next Zitat: Zu den Types: Da ja Selected\col und Selected\row bekannt ist, musst Du per Schleife alle Types durchgehn und auf Übereinstimmung checken. PS: Ich benutze Types, da ich ja nicht nur die Grafiken, sondern zugleich auch die Eigenschaften der jeweiligen Tiles (z.B. benötigte Treffer usw.) mit speichere. |
||
c64 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
HI, sorry wollt schon heute morgen antworten ging aber aus Zeittechnischen gründen leider nicht und ja du hast schon eine Lösung.
!! ABER !! Also für eine Map ist das echt easy und nix für ungut aber die vorgeschlagenen Lösungen entsprechen nicht dem, das was ich für gut halte ![]() ![]() Für eine Map würde ich noch nichteinmal ein Dimfeld nemen sondern eine Bank, und die Tiles würde ich als Type nemen so wie du es ja hast. So nun zum eigentlichen. Code: [AUSKLAPPEN] ;///////////////////////////////////////////////////// ;/ ;/ ;/ Function Add_tile(MapID,pos_X,pos_Y,Layer=1) If MapID HandleMap2D (MapID) BytePos = MapPos2Byte ( pos_X,pos_Y,Layer ) Tile = New Ttile Tile\ID = Handle (Tile) TIle\IMG = wall_002 ;tile\PhysOBJ = Create_PhysObj_plane (pos_X*map\tile_sze_x,pos_y*map\tile_sze_y,map\tile_sze_x,map\tile_sze_y) PokeInt ( map\map,bytepos,Tile\ID) EndIf End Function ;/ ;/ ;/ ;///////////////////////////////////////////////////// ;///////////////////////////////////////////////////// ;/ ;/ ;/ Function HandleTile(TileID) If TileID tile = Object ttile(tileID) Return tile\ID EndIf End Function ;/ ;/ ;/ ;///////////////////////////////////////////////////// ;///////////////////////////////////////////////////// ;/ ;/ ;/ Function DeleteTILE (TILEID) HandleTILE (TILEID) Delete TILE End Function ;/ ;/ ;/ ;///////////////////////////////////////////////////// ;--------------------------------------------------------------------------- ;///////////////////////////////////////////////////// ;/ ;/ ;/ Function MapPos2byte (pos_X,pos_Y,Layer=1) Return ( ( pos_X + pos_y * map\sze_x) * 4 ) + ( (layer-1) * (map\sze_X * map\sze_Y) ) End Function ;/ ;/ ;/ ;///////////////////////////////////////////////////// ;--------------------------------------------------------------------------- ;--------------------------------------------------------------------------- ;///////////////////////////////////////////////////// ;/ ;/ ;/ Function Get_tile(MapID,pos_X,pos_Y, Layer = 1 ) If MapID HandleMap2D (MapID) BytePos = MapPos2Byte ( pos_X,pos_Y,Layer ) TleID = PeekInt (MAP\MAP,Bytepos) Return TleID EndIf End Function ;/ ;/ ;/ ;///////////////////////////////////////////////////// Lass dir einfach mal diese Functionen durch den Kopf gehen ![]() [Code2Text] (ADD_TILE ) : Tile Addn und ID vergeben (Handle_TILE) : ID Benutzen um Tile anzusprechen (Delete_TILE) : ID Benutzen um Tile anzusprechen, und dann löschen [/Code2Text] |
||
Betreten verboten! Kinder haften für ihre Eltern! |
![]() |
Schranz0r |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja Types sind da nicht gut.
Entweder : Dim oder ein Array |
||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!HAUPTSACH et kost VIEL!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Entweder :
Dim oder ein Array Wie wärs mit nem Type Array ![]() Genau so gut wie man Dim map#(10, 10) schreiben kann (float) geht das auch mit Types: Code: [AUSKLAPPEN] Type Tile
Field layer1 Field layer2 Field layer3 End Type Dim map.Tile(20, 20) For y = 0 to 19 For x = 0 to 19 map(x, y) = new Tile map(x, y)\layer1 = 10 Next Next map(5, 0)\layer2 = 20 So hat man den Vorteil dass es nicht 3-Dimensionale Arrays braucht für die Layer, auch wenn es natürlich genau gleich viel Speicher belegt. Aber ich finde es so irgendwie übersichtlicher. Edit: Zudem kann man dann die Tiles immer noch mit For each durchgehen ohne dass man für x und y eine eigene For-Schleife machen muss (falls man einfach mal alle durchgehen will und x, y nicht wichtig ist). Löschen kann man die Types auch direkt per x und y Angabe. |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Entweder :
Dim oder ein Array Ein Dim ist ein array. Und es spricht nichts gegen eine Typemap,wenn man sie vernünftig verwaltet. |
||
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 |
![]() |
Gizeh |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dank Euch für die Ansätze - ich werde sie überdenken!
![]() |
||
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei einem tile based game sind zwei Dinge wichtig:
![]() ![]() Also benutzt man am besten ein Array aus Type-Variablen. So kannst du beliebig viele Eigenschaften pro Tile speichern und jederzeit direkt auf jedes einzelne Feld zugreifen (durch Spalten- und Zeilennummer). BlitzBasic: [AUSKLAPPEN] ; TYPE: EIN FELD AUF DEM SPIELFELD |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
sehr gute sache, xpressive. ![]() das beispiel sollte irgendwo gepinnt werden. fragen zu maps/tiles im zusammenhang mit arrays\types tauchen doch andauernd auf just my 2ct, psy |
||
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hab ja oben in etwa das gleiche gepostet, aber x-pressive hats besser beschrieben ![]() |
||
- Zuletzt bearbeitet von Jolinah am Fr, Nov 10, 2006 22:58, insgesamt einmal bearbeitet
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
...Man kann auch direkt auf ein Type verweisen. Siehe dazu:
ql:Object ql:Handle u.a. im Code des Beitrags https://www.blitzforum.de/foru...hp?t=19846 @x-pressive Echt schöndes Beispiel. Die Vielfalt der Types und das Zusammenspiel von Types und Dims wahren mir bisher noch nicht so nahe gelegt wie das Beispiel von dir da oben... |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group