Map drehen
Übersicht

![]() |
ToeBBetreff: Map drehen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich benutze für mein aktuelles Project Draw3D. Das gibts so ne schönbe funtion die heißt "DrawQuad3D". Daraus setzte ich meine Map zusammen. Die Map besteht aus Types :
Code: [AUSKLAPPEN] Type quad
Field x[3],y[3] Field r#[3] Field tex End Type x,y sind die 4 positionen, r soll der abstand zur mitte der map sein. Damit rechne ich den abstand zur mitte aus : Code: [AUSKLAPPEN] For i = 0 To 3
q\r[i] = Sqr((Mitte_X-q\x[i])^2+(Mitte_Y-q\y[i])^2) Next Jetzt will ich die komplette map drehen, und zwar so, das sie gleich ausieht, also das alle quader so betshen blieben wie sie sind, nur halt anders positioniert. Ich dachte mir das so, wenn ich einen quader erstelle, wird der abstand zur mitte ausgerechnet (also Mitte_X,Mitte_Y) und dann kann man mit Cos(winkel) * rad und Sin(winkel) * rad die punkte positionieren. Falsch gedacht. Ich wollte es so lösen : Code: [AUSKLAPPEN] X1# = q\x[0] + Cos(Map_winkel) * q\r[0]
Y1# = q\y[0] + Sin(Map_winkel) * q\r[0] X2# = q\x[1] + Cos(Map_winkel) * q\r[1] Y2# = q\y[1] + Sin(Map_winkel) * q\r[1] X3# = q\x[2] + Cos(Map_winkel) * q\r[2] Y3# = q\y[2] + Sin(Map_winkel) * q\r[2] X4# = q\x[3] + Cos(Map_winkel) * q\r[3] Y4# = q\y[3] + Sin(Map_winkel) * q\r[3] Zeichnen tu ich so Code: [AUSKLAPPEN] DrawQuad3D(Map_Tex(q\tex),X1,Y1,X2,Y2,X3,Y3,X4,Y4)
Aber da wird die map so komisch gezeichnet. Wie macht man das ? Und wie kann ich das machen das sich die Map um die mitte herum dreht ? weil so würde sich die map immer nur um 0 herumdrehen, aber wie macht man das ? mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du hast die Möglichkeit deine Textur auf das WorldPivot zu laden und eine Mapdrehung anhand RotateEntity![]() |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja das problem ist nur das ich bei dem spiel deine Physix verwende,und die CL's müssen sich ja auch irgentwie mitdrehen... oder kann ich das genauso machen ?
Weil ich will das sich nur die map um den Spieler drum herum dreht, also so das be Phsix der Spieler weriter nachunten fällt, obwohl sich die map um ihn herum dreht... mfg ToeB [Edit] So habs jetzt hinbekommen : Ganzer Code: [AUSKLAPPEN] Graphics3D 800,600,16,2 SetBuffer BackBuffer() Include "Data\Draw3D.bb" Include "Data\Physix.bb" PhysixInit(0,-0.98,2) Global Camera = CreateCamera() DrawInit3D(Camera) Global Native_back = LoadImage3D("Data\Gfx\Metall.png") Origin3D(800,600) Dim Map_Tex(0) For i = 0 To 0 Map_Tex(i) = LoadImage3D("Data\gfx\Map_"+(i+1)+"_Tex.png",4) Next Type quad Field x[3],y[3] Field r#[3],w#[3] Field tex End Type Type cl_rad Field cl.cl Field rad1#,rad2# Field w1#,w2# End Type Global Native_front = LoadImage3D("Data\Gfx\Metall.png") Global Font = LoadFont3D("Data\Gfx\Romulan2.png") Global Map_Winkel# = 0 Global Mitte_X,Mitte_Y Global Kugel.KP = NewKP(Native_Front,-60,60,10,1,1,1000) LoadMap("TestMap") ;q.quad = New quad ;q\tex = 0 ;q\x[0] = -100 ;q\y[0] = -100 ;q\x[1] = -100 ;q\y[1] = -50 ;q\x[2] = -50 ;q\y[2] = -50 ;q\x[3] = -50 ;q\y[3] = -100 ;For i = 0 To 3 ; q\r[i] = Sqr((Mitte_X-q\x[i])^2+(Mitte_Y-q\y[i])^2) ;Next Collisions 1,2,2,2 Repeat If KeyDown(203) Map_winkel = Map_winkel - 1 If KeyDown(205) Map_winkel = Map_winkel + 1 ;DebugLog "Cos(MW) : "+Cos(Map_winkel) ;DebugLog "Sin(MW) : "+Sin(Map_winkel) ColorN3D 255,255,255,1 For q.quad = Each quad X1# = Mitte_X + Cos(Map_winkel+q\w[0]) * q\r[0] Y1# = Mitte_Y + Sin(Map_winkel+q\w[0]) * q\r[0] X2# = Mitte_X + Cos(Map_winkel+q\w[1]) * q\r[1] Y2# = Mitte_Y + Sin(Map_winkel+q\w[1]) * q\r[1] X3# = Mitte_X + Cos(Map_winkel+q\w[2]) * q\r[2] Y3# = Mitte_Y + Sin(Map_winkel+q\w[2]) * q\r[2] X4# = Mitte_X + Cos(Map_winkel+q\w[3]) * q\r[3] Y4# = Mitte_Y + Sin(Map_winkel+q\w[3]) * q\r[3] DrawQuad3D(Map_Tex(q\tex),X1,Y1,X2,Y2,X3,Y3,X4,Y4) ;For i = 0 To 3 ; Oval3D(Native_Front,q\x[i],q\y[i],2.5,2.5,1,2.5) ;Next Next For cr.cl_rad = Each cl_rad cr\cl\x1 = Mitte_X + Cos(Map_Winkel+cr\w1) * cr\rad1 cr\cl\y1 = Mitte_Y + Sin(Map_Winkel+cr\w1) * cr\rad1 cr\cl\x2 = Mitte_X + Cos(Map_Winkel+cr\w2) * cr\rad2 cr\cl\y2 = Mitte_Y + Sin(Map_Winkel+cr\w2) * cr\rad2 Next ;For c.cl = Each cl ; Line3D Native_Front,c\x1,c\y1,c\x2,c\y2,2 ;Next DrawCL(3) ColorN3D(255,0,0,1) DrawKP() Physix(1) UpdateWorld() RenderWorld() Clear3D() Flip Until KeyHit(1) End Function LoadMap(Name$) stream = ReadFile("Data\Map\"+Name$+".map") If Not(stream) Return Local Lastquad.quad Local lastcl_x,lastcl_y,last_cl_ccl Delete Each quad While Not Eof(stream) l$ = ReadLine(stream) If Trim(l$) <> "" And Left(l$,1) <> ";" Func$ = Trim(Lower(Left(l$,Instr(l$,"(")-1))) If Instr(l$,"=") > 0 l2$ = Trim(Lower(Mid(l$,Instr(l$,"=")+1,Len(l$)))) l$ = Mid(l$,Instr(l$,"(")+1,Instr(l$,")")-(Instr(l$,"(")+1)) l$ = Trim(Lower(l$)) Select Func Case "createquad" lastquad = New quad lastquad\tex = 0 Case "quad" nr = l v1 = Left(l2$,Instr(l2$,",")-1) v2 = Mid(l2$,Instr(l2$,",")+1,Len(l2$)) lastquad\x[nr] = v1 lastquad\y[nr] = v2 Case "createcl" last_cl_ccl = 1 Case "cl" If last_cl_ccl = 1 nr = l v1 = Left(l2$,Instr(l2$,",")-1) v2 = Mid(l2$,Instr(l2$,",")+1,Len(l2$)) If nr = 1 lastcl_x = v1 lastcl_y = v2 ElseIf nr = 2 tmp_cl.cl = NewCL(Native_Front,lastcl_x,lastcl_y,v1,v2) cr.cl_rad = New cl_rad cr\cl = tmp_cl last_cl_ccl = 0 EndIf EndIf Case "mapmiddlex" Mitte_X = l2 Case "mapmiddley" Mitte_Y = l2 End Select EndIf Wend CloseFile(stream) For q.quad = Each quad For i = 0 To 3 q\r[i] = Sqr((Mitte_X-q\x[i])^2+(Mitte_Y-q\y[i])^2) q\w[i] = ATan2(q\y[i]-Mitte_Y,q\x[i]-Mitte_X) Next Next For cr.cl_rad = Each cl_rad cr\rad1 = Sqr((Mitte_X-cr\cl\x1)^2+(Mitte_Y-cr\cl\y1)^2) cr\rad2 = Sqr((Mitte_X-cr\cl\x2)^2+(Mitte_Y-cr\cl\y2)^2) cr\w1# = ATan2(cr\cl\y1-Mitte_Y,cr\cl\x1-Mitte_X) cr\w2# = ATan2(cr\cl\y2-Mitte_Y,cr\cl\x2-Mitte_X) Next End Function Function GetParam$(s$,st%,z$=",") anzahl = 1 letzteskomma = 1 For i = 1 To Len(s$) If Mid(s$,i,1) = z$ Or i = Len(s$) Then If anzahl = st Then Tex$ = Mid(s$,letzteskomma,i) letzteskomma = i+1 anzahl = anzahl + 1 EndIf Next Return Tex$ End Function Wie man sieht, habe ich dem Type "CL" um einen externen eintrag erwietert, der Radius und Winkel zum Mittelpunkt von beiden X/Y punkten des CL speichert. Die Function NewCL habe ich in Physix so veränert, das se den Type jetzt zurückgibt. Aber wie kann ich die Kollision des CL jetzt an Die neue Position anpassen ? Die Koordinaten werden richtig geändert, aber die Kollision taugt trotzdem nix... mfg ToeB [Edit2] Oh ich merk grad... Das kann ja gar nicht gehen... Ich habs geschafft das cl geändert wird.... Aber dadurch ist CL auch kein statisches object mehr, also keine Kollision -.- ![]() ![]() Man jetzt hatt ich mir soviel mühe gegeben .. ![]() mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gerade wenn du Physix benutzt, solltest du die Kamera drehen, da Blitz3D von Haus aus keine 3D-Kollisionen erkennt wenn sich die Kollisionsflächen bewegen. Das heisst: Sie fallen dann alle einfach durch. Mit dem Beispiel von mir, passiert das nicht. Das einzige was man machen muß ist die Gravitation jedes Frame neu anpassen. Das ist allerdings nicht direkt mit der Physix vorgesehen. Du musst also bereits als global deffinierte Variablen neuberechnen. Und diese lauten GPhyxXGravity und GPhyxYGravity.
Man erkennt schnell, dass dieser Ansatz um Welten einfacher ist, als die gesamte Map immer wieder neu zu berechnen. Funktioniert nebenbei auch ohne Probleme. Was nach wie vor nicht geht sind bewegte Rampen, Türen etc. auf welche die Objekte stossen könnten. Vielleicht hilft dir folgender Code: Dahin kopieren, wo auch die anderen Beispielcodes der Draw3D sind. Code: [AUSKLAPPEN] Graphics3D 1024,768,0,2
SetBuffer BackBuffer() Local Timer=CreateTimer(100) Local Camera=CreateCamera() CameraClsColor Camera,64,64,64 Include "Includes\Draw3D.bb" Include "Includes\Physix.bb" DrawInit3D(Camera) PhysixInit(0,-0.1,2) Origin3D(1024,768) Local KP Local ImageCL=LoadImage3D("Natives\IronsC.png",2,2,1) Local ImageVK=LoadImage3D("Natives\Gauss.png",2,2,1) Local ImageKP=LoadImage3D("Natives\GMaxA.png",2,2,1) Local ImageXX=LoadImage3D("Natives\Metall.png",2,2,1) Local Font=LoadFont3D("Fonts\Verdana1.png",2,2,0) Local K1.KP=NewKP(ImageXX,-250,+350,6,1,1,1000) Local K2.KP=NewKP(ImageKP,-150,+350,6,1,1,1000) Local K3.KP=NewKP(ImageKP,-150,+250,6,1,1,1000) Local K4.KP=NewKP(ImageKP,-250,+250,6,1,1,1000) NewVK(ImageVK,K1,K2,1,1) NewVK(ImageVK,K2,K3,1,1) NewVK(ImageVK,K3,K4,1,1) NewVK(ImageVK,K4,K1,1,1) NewVK(ImageVK,K1,K3,1,1) NewVK(ImageVK,K2,K4,1,1) NewCL(ImageCL,-700,+200,-200,-200) NewCL(ImageCL,-200,-200,+200,-300) NewCL(ImageCL,+200,-300,+700,+200) Collisions 1,2,2,2 ;HAUPTSCHLEIFE While Not KeyHit(1) Text3D(Font,-380,270,"Mouse for moving Camera",0) Text3D(Font,-380,240,"Hold [1] to undraw VK",0) Text3D(Font,-380,210,"Hold [2] to undraw KP",0) Text3D(Font,-380,180,"Hold [3] to undraw CL",0) Text3D(Font,-380,150,"Cursor for accelerate the black point",0) If KeyDown(203) Then MoveKP(K1,-0.5,0) If KeyDown(205) Then MoveKP(K1,+0.5,0) If KeyDown(200) Then MoveKP(K1,0,+0.5) If KeyDown(208) Then MoveKP(K1,0,-0.5) If Not KeyDown(2) Then DrawVK(3) If Not KeyDown(3) Then DrawKP() If Not KeyDown(4) Then DrawCL(3) PositionEntity Camera,MouseX3D,MouseY3D,0 RotateEntity Camera,0,0,MouseX3D/4.0 GPhyxXGravity=+Sin(EntityRoll(Camera))*0.05 GPhyxyGravity=-Cos(EntityRoll(Camera))*0.05 Physix(1) ;Standard-Sachen WaitTimer(Timer) UpdateWorld RenderWorld Clear3D() Flip 0 Wend End |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey cool !
Aber irgentwie wird die CL nicht angepasst : Code: [AUSKLAPPEN] Graphics3D 800,600,16,2 SetBuffer BackBuffer() Include "Data\Draw3D.bb" Include "Data\Physix.bb" Global GRAV# = -0.98 PhysixInit(0,GRAV,2) Global Camera = CreateCamera() DrawInit3D(Camera) Global Native_back = LoadImage3D("Data\Gfx\Metall.png") Origin3D(800,600) Dim Map_Tex(0) For i = 0 To 0 Map_Tex(i) = LoadImage3D("Data\gfx\Map_"+(i+1)+"_Tex.png",4,2,1) Next Type quad Field x[3],y[3] Field r#[3],w#[3] Field tex End Type Type cl_rad Field cl.cl Field rad1#,rad2# Field w1#,w2# End Type Global CL_Tex = LoadImage3D("Data\Gfx\Metall.png",2,2,1) Global Native_front = LoadImage3D("Data\Gfx\Metall.png") Global Font = LoadFont3D("Data\Gfx\Romulan2.png") Global Map_Winkel# = 0 Global Mitte_X,Mitte_Y Global Kugel.KP = NewKP(Native_Front,-60,60,10,1,1,1000) LoadMap("TestMap") DrawMap() Collisions 1,2,2,2 PositionEntity Camera,Mitte_X,Mitte_Y,0 Repeat OldWinkel = Map_winkel If KeyDown(203) Map_winkel = Map_winkel - 1 If KeyDown(205) Map_winkel = Map_winkel + 1 RotateEntity Camera,0,0,Map_winkel ColorN3D 255,255,255,1 DrawCL(3) ColorN3D(255,0,0,1) DrawKP() GPhyxXGravity=+Sin(Map_winkel)*-GRAV GPhyxyGravity=-Cos(Map_winkel)*-GRAV Physix(1) UpdateWorld() RenderWorld() Clear3D() Flip Until KeyHit(1) End Function LoadMap(Name$) stream = ReadFile("Data\Map\"+Name$+".map") If Not(stream) Return Local Lastquad.quad Local lastcl_x,lastcl_y,last_cl_ccl Delete Each quad While Not Eof(stream) l$ = ReadLine(stream) If Trim(l$) <> "" And Left(l$,1) <> ";" Func$ = Trim(Lower(Left(l$,Instr(l$,"(")-1))) If Instr(l$,"=") > 0 l2$ = Trim(Lower(Mid(l$,Instr(l$,"=")+1,Len(l$)))) l$ = Mid(l$,Instr(l$,"(")+1,Instr(l$,")")-(Instr(l$,"(")+1)) l$ = Trim(Lower(l$)) Select Func Case "createquad" lastquad = New quad lastquad\tex = 0 Case "quad" nr = l v1 = Left(l2$,Instr(l2$,",")-1) v2 = Mid(l2$,Instr(l2$,",")+1,Len(l2$)) lastquad\x[nr] = v1 lastquad\y[nr] = v2 Case "createcl" last_cl_ccl = 1 Case "cl" If last_cl_ccl = 1 nr = l v1 = Left(l2$,Instr(l2$,",")-1) v2 = Mid(l2$,Instr(l2$,",")+1,Len(l2$)) If nr = 1 lastcl_x = v1 lastcl_y = v2 ElseIf nr = 2 NewCL(CL_Tex,lastcl_x,lastcl_y,v1,v2) last_cl_ccl = 0 EndIf EndIf Case "mapmiddlex" Mitte_X = l2 Case "mapmiddley" Mitte_Y = l2 End Select EndIf Wend CloseFile(stream) End Function Function DrawMap() For i = 0 To 0 ClearOff3D(Map_Tex(i)) Next For q.quad = Each quad DrawQuad3D(Map_Tex(q\tex),q\x[0],q\y[0],q\x[1],q\y[1],q\x[2],q\y[2],q\x[3],q\y[3]) Next End Function Function GetParam$(s$,st%,z$=",") anzahl = 1 letzteskomma = 1 For i = 1 To Len(s$) If Mid(s$,i,1) = z$ Or i = Len(s$) Then If anzahl = st Then Tex$ = Mid(s$,letzteskomma,i) letzteskomma = i+1 anzahl = anzahl + 1 EndIf Next Return Tex$ End Function (ich hoffe du blickst durch den code durch x) Die map und so dreht sich jetzt perfect, aber die CLs bleiben an einer stelle bzw. drehen sich mit der camera mit... mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Alle Bilder die nicht im HUD-Pivot gezeichnet werden, müßen auch mit dem Parameter -''Pivot'' auf 1 gestellt sein. In deinem Fall auch Native_front. | ||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja danke ich hatts auch gesehen, aber erst als ich die nachricht abgeschikt hatte ^^
aber kann man diese Gravitations-änderung nicht sofort wirkken lassen, also so das wenn dich die gravitaion ändert die ricfhtung der kugel sich auch schlagartig ändert ? sonst wirkt das ganze sehr schleppend... mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sie ändert sich ja sofort. Das was so ''komisch'' aussieht ist die Tatsache, dass so eine Kamerabewegung für den Menschen ungewohnt ist. Abhilfe dazu kann das mitführen der Kamera auf das Zielobjekt schaffen. Also so, dass deine Kugel immer im Mittelpunkt vom Bildschirm sich aufhält. | ||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group