Zahnräder erstellen

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Terror-State

Betreff: Zahnräder erstellen

BeitragDi, Nov 22, 2005 13:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Tach Leute ich wollt euch einfach mal mein kleines Projekt der letzten beiden Tage vorstellen:

BlitzBasic: [AUSKLAPPEN]

Graphics 250,250

Global frametimer = CreateTimer (50)
Global Runde, Stopper, Now, TimeDiff
Global Bild
Global Ende = 60


Dim Zahn(5,360)
Dim Kreis#(360,1)


ClsColor 255,255,255
Color 0,0,0
TFormFilter 0

Now = MilliSecs()

For I = 0 To 360
Kreis(I,0) = Sin(I)+1
Kreis(I,1) = Cos(I)+1
Next
;CreateZahn(ID,W,H)
CreateZahn(0,25,70)
CreateZahn(1,20,30)
Runde = MilliSecs()
Stopper = Runde-Now

Repeat
WaitTimer (frametimer)
SetBuffer BackBuffer()
Cls
Now = MilliSecs()
TimeDiff = (Now-Runde)

Color 100,100,100
;Zahnrad(ID,X,Y,W,H,R,Speed,LaufR,Max,EndW)
Zahnrad(0,90,90,25,70,60,10,1,60,5)
Zahnrad(1,0,50,20,30,50,20,0,72,4)
Zahnrad(1,100,0,30,20,40,30,1,45,7)

Color 255,0,0
Text 0,15,\"Laufzeit: \"+TimeDiff+\" ms\"
Text 0,30,\"Preload: \"+Stopper+\" ms\"


Flip
Until KeyHit(1)




Function Zahnrad(ID,X,Y,W,H,R,Speed,LaufR,Max,Anzahl)

FrameAkt = TimeDiff/Speed

Oval X+H*3/4,Y+H*3/4,R*2-H/2,R*2-H/2
For I=0 To Anzahl
Wert = (FrameAkt+I*Max) Mod 360
If LaufR Then Wert = 360-Wert
Frame = (Wert/6) Mod Ende

XW = X + H/2 + R * Kreis#(Wert,0)
YW = Y + H/2 + R * Kreis#(Wert,1)
DrawImage Zahn(ID,Frame),XW,YW
Next
End Function



Function CreateZahn(ID,Width,Height)
Bild = CreateImage(Width,Height)
SetBuffer ImageBuffer(Bild)
Rect 0,0,Width,Height
SetBuffer BackBuffer()
MaskImage Bild,242,0,242
For I=0 To Ende-1
Zahn(ID,I) = CopyImage(Bild)
RotateImage Zahn(ID,I),(Ende-I)*6
MidHandle Zahn(ID,I)
Next
End Function


Ich hoffe ihr seht durch ^^
Durch die vielen Parameter bei
Zahnrad(ID,X,Y,W,H,R,Speed,LaufR,Max,Anzahl)
Sind die Räder ziemlich dynamisc wie ich finde... ich erklär die mal kurz:

ID : Lädt die zuvor mit CreateZahn() erstellten Zähne der entsprechenden ID
X : horizontaler Abstand
Y : vertikaler Abstand
sollte eins der beiden 0 sein is der mindestabstand die höhe des Zahnes

W : Breite des Zahns (muss dem Wert von CreateZahn() entsprechen)
H : Höhe des Zahns (muss dem Wert von CreateZahn() entsprechen)
R : Radius des Kreises (nur zur Orientierung! Echter Radius = R*2 - H/2)
Speed : Rotationsgeschwindigkeit
LaufR : LaufRichtung - 0 ist mathematischer Drehsinn ;1 Uhrzeigersinn
Max : Abstand der Zähne
Anzahl : Anzahl der Zähne-1

Ich hoffe ihr seht durch ^^ Naja wäre nett wenn ihr mir nochn paar Tipps geben könntet zur Optimierung.
Schönen Tach noch!
Ob friedlich oder militant, wichtig ist der Widerstand

skey-z

BeitragDi, Nov 22, 2005 20:01
Antworten mit Zitat
Benutzer-Profile anzeigen
nett, aber ich finde die zahnräder sollten auch ineinander übergreifen, sprich ne kleine Kollisionsprüfung.
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter
 

super_castle

BeitragSo, Dez 18, 2005 16:01
Antworten mit Zitat
Benutzer-Profile anzeigen
nimm am besten reine sprite und die lässt du dann drehen.

mfg castle
 

super_castle

BeitragSo, Dez 18, 2005 16:28
Antworten mit Zitat
Benutzer-Profile anzeigen
hier mein beispiel mit 2 zahnrädern, die ich mit doga l3 hergestellt und exportiert habe, habe ich mit milkshape auch schon gemacht.

Code: [AUSKLAPPEN]

Graphics3D 800,600,16,2
SETBUFFER BACKBUFFER()
camera=CreateCamera()
 
light=CREATELIGHT(1)
ROTATEENTITY light,90,0,0
PositionEntity camera,0,0,0   

z1=LoadMesh ("z1.x")
PositionEntity z1,0,0,3
RotateEntity z1,0,90,0

z2=LoadMesh ("z2.x")
PositionEntity z2,1.35,0,3
RotateEntity z2,0,90,0

TurnEntity z1,7.5,0,0
TurnEntity z2,3.5,0,0

While Not KeyDown(1)
   
   For a=0 To 1200
      TurnEntity z2,-0.3,0,0
      TurnEntity z1,0.3,0,0
      RenderWorld
      Flip
   Next

   For a=0 To 1200
      TurnEntity z2,0.3,0,0
      TurnEntity z1,-0.3,0,0
      RenderWorld
      Flip
   Next


WEND
END


mfg castle
wenn du möchtest, schicke ich dir die beiden zahnräder z1 und z2 zum test:
pebisoft@arcor.de

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group