Seite 2 von 2

Verfasst: 31.01.2006 13:59
von STARGÅTE
Also damit alle was davon haben, hier der code so wi ichs bei meinen Spielen gemacht habe :

Code: Alles auswählen

If InitSprite() = 0 
 MessageRequester("Error", "Can't open DirectX 7 Or later", 0)
  End
EndIf
If InitKeyboard() = 0
 MessageRequester("Error", "Can't open DirectX 7 Or later", 0)
End
EndIf
If InitSprite3D() = 0
 MessageRequester("Error", "Direct3D system can't be initialized correctly", 0)
  End
EndIf
If InitMouse() = 0 
 MessageRequester("Error", "Can't open DirectX 7", 0)
  End
EndIf

xP = 1024 ; Pixel in X-Richtung
yP = 768  ; Pixel in Y-Richtung

If OpenScreen(xP, yP, 32, "") = 0
 MessageRequester("Error", "Can't open screen !", 0)
  End
EndIf

Sprite3DQuality(1) 

CreateSprite(1, 64, 64, #PB_Sprite_Texture) 
 StartDrawing(SpriteOutput(1))
  Box(0,0,32,32,RGB(255,0,0))
  Box(0,32,32,32,RGB(0,255,0))
  Box(32,0,32,32,RGB(0,0,255))
  Box(32,32,32,32,RGB(255,255,0))
 StopDrawing() 
CreateSprite3D(1, 1)

b.f = 3.14159265/180

x1.f = 400 ; X-Posiion
y1.f = 400 ; Y-Posiion
w.f = 270 ; Winkel
t.f 
neuX.f
neuY.f

Structure Obj
 x.f
 y.f
 w.f
EndStructure
NewList Obj.Obj()
Procedure Objekt(x, y, w)
 AddElement(Obj())
 Obj()\x = x           
 Obj()\y = y  
 Obj()\w = w           
EndProcedure

For n = 1 To 20 :
 Objekt(Random(200)*4, Random(200)*4, Random(359))
Next n

Repeat

 ExamineKeyboard() 
  If KeyboardPushed(#PB_Key_Escape) <> 0 :
   End
  EndIf
  If KeyboardPushed(#PB_Key_Up) <> 0 :
   x1 = x1 + Cos(w*b)*2
   y1 = y1 + Sin(w*b)*2
  EndIf
  If KeyboardPushed(#PB_Key_Down) <> 0 :
   x1 = x1 - Cos(w*b)*2
   y1 = y1 - Sin(w*b)*2
  EndIf
  If KeyboardPushed(#PB_Key_Left) <> 0 :
   w = w - 1
  EndIf
  If KeyboardPushed(#PB_Key_Right) <> 0 :
   w = w + 1
  EndIf

 FlipBuffers()          
 ClearScreen(0,0,0)
 
  ; **** Bild

  ; ** Objekte 
 
  Start3D()
   ResetList(Obj())
   While NextElement(Obj())
    ; ---- Das die die Bildberechnung ----
    a = Sqr(Pow(x1-Obj()\x,2)+Pow(y1-Obj()\y,2))
    t = ATan((y1-Obj()\y)/(x1-Obj()\x))/b  
    If x1 > Obj()\x : t = t-180 : EndIf
    neuX = xP/2+Cos((t-w+270)*b)*a
    neuY = yP/2+Sin((t-w+270)*b)*a
    ZoomSprite3D(1, 40, 40)
    RotateSprite3D(1, Obj()\w-w, 1)
    DisplaySprite3D(1, neuX-20, neuY-20, 255)
    ; ------------------------------------
   Wend
  Stop3D()
 
  ; ** Mensch 

  StartDrawing(ScreenOutput())
   Circle(xP/2, yP/2, 16, RGB(255,255,255))
   LineXY(xP/2, yP/2, xP/2, 354, RGB(255,255,255)) 
  StopDrawing() 

  ; **** Karte

  StartDrawing(ScreenOutput())
   DrawingMode(4) 
    Box(0, 0, 200, 200, RGB(128,128,128))
  StopDrawing() 

  ; ** Objekte 

  Start3D()
   ResetList(Obj())
   While NextElement(Obj())
    ZoomSprite3D(1, 40/4, 40/4)
    RotateSprite3D(1, Obj()\w+90, 1)
    DisplaySprite3D(1, Obj()\x/4-20/4, Obj()\y/4-20/4, 255)
   Wend
  Stop3D()

  ; ** Mensch 

  StartDrawing(ScreenOutput())
   Circle(x1/4, y1/4, 16/4, RGB(255,255,255))
   LineXY(x1/4, y1/4, x1/4+Cos(w*b)*15, y1/4+Sin(w*b)*15, RGB(255,255,255))  
  StopDrawing() 

ForEver

Verfasst: 31.01.2006 16:24
von Milchshake
Thanks!!
(ich finde,in diesem Forum gibts viele nette leute)
:allright:

Verfasst: 31.01.2006 16:25
von NicTheQuick
@STARGÂTE:
Ist das Absicht, dass sich die vielen Quadrate da so schnell um sich selbst
drehen?

Verfasst: 31.01.2006 17:07
von Ypser
@NtQ
Änder mal in Zeile 101 den 3. Parameter von RotateSprite3D() von 1 auf 0, dann gehts.

PS: wenn jemand sowas braucht, mit Sprite3Ds, die auch beliebig verzerrt sein können, hab da noch nen Code.
(Sprites werden über ihre 4 Eckkoordinaten gedreht/verzerrt)...

Verfasst: 31.01.2006 20:19
von STARGÅTE
Ypser hat geschrieben:@NtQ
Änder mal in Zeile 101 den 3. Parameter von RotateSprite3D() von 1 auf 0, dann gehts.

PS: wenn jemand sowas braucht, mit Sprite3Ds, die auch beliebig verzerrt sein können, hab da noch nen Code.
(Sprites werden über ihre 4 Eckkoordinaten gedreht/verzerrt)...
aber wenn du daraus eine 0 macht dann ist doch das ZOOM um sonst :freak:
ich habe schon im Seitenverhältnis 1:1 gezoomt dann musste es doch gehen :|

Verfasst: 31.01.2006 21:02
von NicTheQuick
@STARGÂTE:
Er meint Zeile 102 mit [c]RotateSprite3D(.., .., 0)[/c].

Verfasst: 01.02.2006 01:49
von STARGÅTE
NicTheQuick hat geschrieben:@STARGÂTE:
Er meint Zeile 102 mit [c]RotateSprite3D(.., .., 0)[/c].
ich ja auch :lol:

Das Sprite ist 64*64
dann zoome ich auf 40*40
dann muss ich doch RotateSprite3D(.., .., 1) machen
damit er 40*40 dreht und nicht das 64*64

:freak:

Oder bin ich doch schon hinterm Pluto mit meinem 3.3 :(

Verfasst: 01.02.2006 10:50
von Ypser
Ich meinte Zeile 101, hab die Leerzeile ganz oben nicht mitkopiert 8)
STARGÅTE hat geschrieben:Oder bin ich doch schon hinterm Pluto mit meinem 3.3 :(
Jup!