dynamische felder um figur ?

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

biggicekey

Betreff: dynamische felder um figur ?

BeitragMi, Dez 06, 2006 14:03
Antworten mit Zitat
Benutzer-Profile anzeigen
hey,
folgende situation:

1 figur steht auf einer plane. um sie herum und auch an ihrer position sollen 5*5 objekte positioniert sein. siehe bild1
bewegt sich nun die figur nach vorne (auf dem bild nach oben) so sollen die nun mehr als 2 felder entfernten objekte an freie stellen in diesem raster, also die felder oberhalb der anderen, verschoben werden.
so soll immer gewährleistet sein das sich die figur in der mitte der 5*5objekte befindet. es sollen aber nicht einfach alle objekte mitverschoben werden.

bild:
user posted image

wie lässt sich sowas realisieren?
bin für jeden ansatz dankbar
gruß key
#45 www.icekeyunlimited.de www.starcrusade.de
Gewinner BCC#17 !!! mit dotkiller
Nothing more to register - you've cleaned us out![/size]

DerHase

BeitragMi, Dez 06, 2006 14:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiss nicht ob ich Dich richtig verstanden habe, aber kuck Dir mal DIES HIER an. Ist zwar 2d aber da werden um den Spieler auch blöcke gezeichnet.
Play Satyr!

biggicekey

BeitragMi, Dez 06, 2006 14:39
Antworten mit Zitat
Benutzer-Profile anzeigen
das problem dabei ist ja das die ganzen felder einfach an der neuen position gezeichnet werden. so solls nicht sein. nur die felder welche einen bestimmten "radius" verlassen sollen an die freien positionen in diesem "radius"
#45 www.icekeyunlimited.de www.starcrusade.de
Gewinner BCC#17 !!! mit dotkiller
Nothing more to register - you've cleaned us out![/size]

BladeRunner

Moderator

BeitragMi, Dez 06, 2006 14:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Vorgehen:
Wenn Figur nach oben bewegt wird:
- speichere die unterste Reihe in einem temporären array.
- kopiere beginnend bei der vorletzten Reihe alle reihen einen Index weiter nach unten. ( Beispiel map(x,5) = map x,4 ; x durchiterieren, statt 5 und 4 eine Zählvar per for ... step-1 ...next iterieren.)
- speichere das die temporäre Reihe in die oberste Reihe.

Sollte es dir um die direkten Objektkoordinaten gehen für 3d kannst du die analog (mit einem Faktor für den Abstand) berechnen und dann die entities positionieren.

Das vorgehen für alle anderen Richtungen ist identisch, nur der Inhalt des temp.arrays (Zeile oder Spalte) und die Richtung in der iteriert wird ändert sich.
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

biggicekey

BeitragMi, Dez 06, 2006 17:22
Antworten mit Zitat
Benutzer-Profile anzeigen
bei mir hat das mit den arrays speichern nicht so geklappt wie ich wollte. dachte ich hätte nen ansatz aber da waren immer die arays out of bounds und ob ich den zu 3d übertragen hätte können wäre ne andere frage gewesen.

habe dann komplett anderen ansatz gestartet.
erfüllt seinen zweck doch kommt mir etwas umständlich vor.
wahrscheinlich nicht die beste variante.
wer verbesserungen oder alternativen hat bitte schreiben.
besonders über ein beispiel von dir bladerunner würd ich mich freuen.
danke erstmal
gruß key

Code: [AUSKLAPPEN]

Graphics3D 800,600,16,2
SetBuffer BackBuffer()
WBuffer 0

Global cam = CreateCamera()

MoveEntity cam,0,100,0



Dim blub(8,8)
   For sx = 0 To 8
      For sz = 0 To 8
         bmesh = CreateCube()
         ScaleEntity bmesh,10,1,10
         PositionEntity bmesh,sx*64,0,sz*64
         ;EntityFX gmesh,1+16+2
         
         blub(sx,sz) = bmesh
      Next
   Next


PositionEntity cam,EntityX(blub(4,4)),450,EntityZ(blub(4,4))

TurnEntity cam,90,0,0


cube=CreateCube(cam)
MoveEntity cube,0,0,450
ScaleEntity cube,5,5,5
EntityColor cube,0,255,0


Global fps_frames,fps_ms,fps_anzeige#



While Not KeyHit(1)

   


   If KeyDown(203) Then MoveEntity cam,-1,0,0
   If KeyDown(205) Then MoveEntity cam,1,0,0
   If KeyDown(200) Then MoveEntity cam,0,1,0
   If KeyDown(208) Then MoveEntity cam,0,-1,0





For sx = 0 To 8
   For sz = 0 To 8
      
      If ((EntityX(cam)/64-EntityX(blub(sx,sz))/64) > 4.4)
      
         MoveEntity blub(sx,sz),9*64,0,0
      
      ElseIf ((EntityX(cam)/64-EntityX(blub(sx,sz))/64) < -4.4)

         MoveEntity blub(sx,sz),-9*64,0,0

      EndIf


      If ((EntityZ(cam)/64-EntityZ(blub(sx,sz))/64) > 4.4)
      
         MoveEntity blub(sx,sz),0,0,9*64

      ElseIf ((EntityZ(cam)/64-EntityZ(blub(sx,sz))/64) < -4.4)

         MoveEntity blub(sx,sz),0,0,-9*64

      EndIf


      If ((EntityZ(cam)/64-EntityZ(blub(sx,sz))/64) <.5 ) And ((EntityZ(cam)/64-EntityZ(blub(sx,sz))/64) > -.5 ) And ((EntityX(cam)/64-EntityX(blub(sx,sz))/64) <.5 ) And ((EntityX(cam)/64-EntityX(blub(sx,sz))/64) > -.5 )
      EntityColor blub(sx,sz),255,0,0
      EndIf


   Next
Next




UpdateWorld()
RenderWorld()

Text 0,0,EntityX(cam)
Text 0,20,EntityZ(cam)


Text 0,40,"FPS: "+util_fps()


Flip 0

Wend

End
 






Function Util_Fps()
   fps_frames=fps_frames+1
   If MilliSecs()-fps_ms >= 1000 Then
      fps_anzeige=fps_frames
      fps_frames=0
      fps_ms=MilliSecs()
   EndIf
   Return fps_anzeige
End Function
#45 www.icekeyunlimited.de www.starcrusade.de
Gewinner BCC#17 !!! mit dotkiller
Nothing more to register - you've cleaned us out![/size]

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group