Wie erstellt man ein Rollierendes Karussell-Menü? [gelöst]
Übersicht

![]() |
Ecoman68Betreff: Wie erstellt man ein Rollierendes Karussell-Menü? [gelöst] |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
ich möchte gerne für mein Game ein rollierendes Karusell-Menü, wie zum Beispiel in Singstar oder Ultrastar erstellen. Es geht mit hierbei hauptsachlich um die Drehung und die Scalierung der Grafiken. Kann mir hierbei bitte jemand auf die Sprünge helfen? ![]() Vielen Dank schon mal! Cu, Ecoman68 ![]() |
||
- Zuletzt bearbeitet von Ecoman68 am Mo, Dez 17, 2007 19:23, insgesamt einmal bearbeitet
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Echtzeitrotation und Skalierung geht gut mit Sprites, das sind 2D-Bildchen in einer 3D-Welt. Siehe dazu die Sprite-Befehle unter Blitzbase.
Loadsprite() Rotatesprite() Scalesprite() |
||
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
Und natürlich sin() und cos() ![]() |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
So in etwa :
Code: [AUSKLAPPEN] Graphics 800,600,16,2
SetBuffer BackBuffer() Dim t$(5) ;Anzahl der Menü einträge For i = 1 To 5 Read t(i) Next Global Font = LoadFont("Arial",30,0,0,0) Global BigFont = LoadFont("Arial",50,1,0,0) SetFont Font Global Menu = 1 Global winkel Repeat If KeyHit(203) Then winkel = winkel - 1 If KeyHit(205) Then winkel = winkel + 1 For i = 1 To 5 Text 400+Cos((winkel+i)*(360/5)+90)*300,300+Sin((winkel+i)*(360/5)+90)*300,T(i),1,1 Next Flip Cls Until KeyHit(1) End .Menu_Eintraege Data "Spiel starten" Data "Multiplayer" Data "Highscore" Data "Optionen" Data "Beenden" ![]() mfg Crack93 |
||
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! |
![]() |
Ecoman68 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
vielen Dank erst einmal für die schnellen Antworten. ![]() Der Tipp mit den Sprites bringt mich schon weiter, denk ich mal - hatte zuerst an Cubes gedacht. @Crack93: Nicht ganz, denn die Rotation soll eigentlich über die Z-Achse erfolgen, so daß man das vorderste Menübild horizontal zentriert am größten und die (im gedachten Kreis) dahinter liegenden entsprechend kleiner scaliert sieht. Vielen Dank für Deine Mühe! ![]() Cu, Ecoman68 ![]() |
||
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
kannst auch "flache" cubes nehmen, die methode ist wesentlich schneller. wobei beim menü brauchste eh nicht viel fps... | ||
![]() |
peacemaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, oder gleich die geniale Draw3D-Lib benutzen (siehe Codearchiv), wobei die anderen Methoden ja auch gut sind.
MfG |
||
~Tehadon~
www.tehadon.de http://www.blitzforum.de/worklogs/14/ |
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
Rollmenü... Kommt mir bekannt vor (Help of Monkey Island)
Hab mal den Code angepasst. mx, my - Mitelpunkt von Menü mr - Radius vom Menü mv - Verhältnis vom Kreis (bei 1 ist es ein normaler Kreis, bei kleineren Werten kommt der 3d-Effekt) Edit: Fehlerchen beseitigt... ![]() Code: [AUSKLAPPEN] ;Rollmenü
;von SpionAtom Dezember 2oo7 Const xr = 640, yr = 480, fps = 60 Global mx = xr / 2 Global my = yr / 2 Global mr = yr / 2 Global mv# = 0.1 Const items = 8 Global mItem$[items] mItem[0] = "Start" mItem[1] = "Laden" mItem[2] = "Speichern" mItem[3] = "Hilfe" mItem[4] = "Highscore" mItem[5] = "Website" mItem[6] = "Credits" mItem[7] = "Ende" Dim Obj(2 * items) Global oN ;Anzahl Objekte im Rad (max. 30) Global oI ;Radposition oN = items ;Anzahl Objekte im Rad (max. 30) Graphics xr, yr, 0, 3: SetBuffer BackBuffer() fps_timer = CreateTimer(fps) Global fontsRes = 20 Dim fonts(fontsRes) For i = 0 To fontsRes: fonts(i) = LoadFont("Arial", 10 + i * 2): Next turnanim = 0 turndir = 0 FlushKeys() ;Spielschleife Repeat ;Eingaben If KeyDown(203) And turnanim = 0 Then turnanim = 1: turndir = -1 If KeyDown(205) And turnanim = 0 Then turnanim = 1: turndir = 1 If KeyHit(1) Then End If turnanim = 1 Then turnanim = 2 s# = 360 / oN / 5 t = 0 End If If turnanim = 2 Then If t < 360 / oN - s Then s = s * 0.9: If s < 5 Then s = 5 t = t + s Else ;Rad um eine Position drehen If turndir = -1 Then oI = oI + 1: If oI > oN - 1 Then oI = 0 If turndir = 1 Then oI = oI - 1: If oI < 0 Then oI = oN - 1 turnanim = 0 turndir = 0 End If End If ;Ausgaben Cls For i = oN / 2 + 1 To oN xx = mx - Sin(360 / oN*(i-1) + (t * turndir)) * mr yy = my + Cos(360 / oN*(i-1) + (t * turndir)) * mr * mv ;Oval xx - 3, yy - 3, 6, 6 txt$ = mItem[(oI + i - 1) Mod (items)] fnt = fonts(Int((Cos(360 / oN*(i-1) + (t * turndir)) * fontsRes + fontsRes) / 2)) SetFont fnt Color 55, 155, 255: Rect xx - StringWidth(txt$) / 2 - 3, yy - StringHeight(txt$) / 2 - 3, StringWidth(txt$) + 6, StringHeight(txt$) + 6 Color 0, 0, 255: Rect xx - StringWidth(txt$) / 2 - 3, yy - StringHeight(txt$) / 2 - 3, StringWidth(txt$) + 6, StringHeight(txt$) + 6, 0 Color 255, 255, 255: Text xx - StringWidth(txt$) / 2, yy - StringHeight(txt$) / 2, txt$ Next For i = oN / 2 To 1 Step -1 xx = mx - Sin(360 / oN*(i-1) + (t * turndir)) * mr yy = my + Cos(360 / oN*(i-1) + (t * turndir)) * mr * mv ;Oval xx - 3, yy - 3, 6, 6 txt$ = mItem[(oI + i - 1) Mod (items)] fnt = fonts(Int((Cos(360 / oN*(i-1) + (t * turndir)) * fontsRes + fontsRes) / 2)) SetFont fnt Color 55, 155, 255: Rect xx - StringWidth(txt$) / 2 - 3, yy - StringHeight(txt$) / 2 - 3, StringWidth(txt$) + 6, StringHeight(txt$) + 6 Color 0, 0, 255: Rect xx - StringWidth(txt$) / 2 - 3, yy - StringHeight(txt$) / 2 - 3, StringWidth(txt$) + 6, StringHeight(txt$) + 6, 0 Color 255, 255, 255 If i = 1 And turnanim = 0 Then Color 255, 255, 0: Rect xx - StringWidth(txt$) / 2 - 3, yy - StringHeight(txt$) / 2 - 3, StringWidth(txt$) + 6, StringHeight(txt$) + 6, 0 Text xx - StringWidth(txt$) / 2, yy - StringHeight(txt$) / 2, txt$ Next Flip(0) WaitTimer fps_timer Until ende = 1 End (Ist noch nicht reif fürs Codearchiv, da es noch nicht so konfortabel einbindbar ist.) |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
- Zuletzt bearbeitet von SpionAtom am So, Dez 16, 2007 20:23, insgesamt 3-mal bearbeitet
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sieht ja wie 3D aus ![]() Geil ^^ mfg Crack93 |
||
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! |
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
machts doch nicht so kompliziert, wozu haben wir 3D ![]() Code: [AUSKLAPPEN] Graphics3D 800,600,32,2
texture=createtexture (64,64) RotateTexture texture,180 SetBuffer TextureBuffer(texture) Text 10,20,"BLUBB" TextureBlend texture,3 SetBuffer BackBuffer() Dim cube(6) pivot = createpivot() cam = createcamera() PositionEntity cam,0,-10,-2 TurnEntity cam,-90,0,0 angle%=0 For i=1 To 6 cube(i)=createcube(pivot) ScaleEntity cube(i),1,.01,1 EntityColor cube(i),rand(255),rand(255),rand(255) EntityTexture cube(i),texture Next For i=1 To 6 PositionEntity cube(i),sin(60.0 * i)*5,cos(60.0 * i )*5 , 0 Next Repeat If KeyDown(205) Then angle=(angle+5) Mod 360 If KeyDown(203) Then angle=(angle-5) Mod 360 RotateEntity pivot,0,0,angle For i=1 To 6 AlignToVector cube(i),0,-10,0,2 Next RenderWorld() Text 10,10,"USE ARROW KEYS TO ROTATE CUBES" Flip Until KeyHit(1) l8er, PSY |
||
![]() |
Ecoman68 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi Leute,
Ihr habt echt coole Codes gepostet. ![]() Ich habe den Code von PSY aufgrund der Kürze gewählt und ihn noch etwas erweitert, damit die Menüpunkte "einrasten" und die CPU nicht so beansprucht wird. Der vollständigkeithalber poste ich ihn hier, falls jemand auch noch sowas braucht: Code: [AUSKLAPPEN] Graphics3D 1024,768,32,2
texture=CreateTexture (64,64) RotateTexture texture,180 SetBuffer TextureBuffer(texture) Text 32,32,"Danke!",True,True TextureBlend texture,3 SetBuffer BackBuffer() Dim cube(9) pivot=CreatePivot() cam=CreateCamera() PositionEntity cam,0,-13,0 TurnEntity cam,-90,0,0 CameraClsColor cam,255,255,255 angle%=20 anglediff%=0 anglestep%=0 pause=CreateTimer(60) For i=1 To 9 cube(i)=CreateCube(pivot) ScaleEntity cube(i),1,.01,1 EntityColor cube(i),Rand(255),Rand(255),Rand(255) EntityTexture cube(i),texture Next For i=1 To 9 PositionEntity cube(i),Sin(40.0 * i)*8,Cos(40.0 * i )*8 , 0 Next RotateEntity pivot,0,0,angle For i=1 To 9 AlignToVector cube(i),0,-10,0,2 Next RenderWorld() Flip ;*** Hauptschleife *** Repeat If KeyDown(205) Then anglediff=40 If KeyDown(203) Then anglediff=-40 If anglediff<>0 Then If anglediff<0 Then anglestep=-5 Else anglestep=5 EndIf While anglediff<>0 anglediff=anglediff-anglestep angle=(angle+anglestep) Mod 360 RotateEntity pivot,0,0,angle For i=1 To 9 AlignToVector cube(i),0,-10,0,2 Next RenderWorld() Flip Wend EndIf WaitTimer(pause) Until KeyHit(1) End Nochmals vielen Dank an PSY, SpionAtom und Crack93! ![]() Cu, Ecoman68 ![]() |
||
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die 3D-Variante hätte ich meiner auch bevorzugt. Ich wollt halt nur mal aufzeigen, dass es auch ohne geht. Und wer kein 3D hat, kann immer doch auf meinem aufbauen ![]() Edit: Code verkürzt, keine globalen Variablen mehr drin (bis auf das Dim-feld für die Schrift) Code: [AUSKLAPPEN] ;Rollmenü
;von SpionAtom Dezember 2oo7 Const xr = 640, yr = 480, fps = 60 Graphics xr, yr, 0, 3: SetBuffer BackBuffer() fps_timer = CreateTimer(fps) ;>>>>>>>>>> Menüeigenschaften und Menüpunkte <<<<<<<<<< mx = xr / 2 my = yr / 2 mr = yr / 2 mv# = 0.1 items = 8 Local mItem$[7] mItem[0] = "Spiel starten" mItem[1] = "Laden" mItem[2] = "Speichern" mItem[3] = "Hilfe" mItem[4] = "Highscore" mItem[5] = "Website" mItem[6] = "Credits" mItem[7] = "Beenden" ;Schrift fontsRes = 20 Dim fonts(fontsRes) For i = 0 To fontsRes: fonts(i) = LoadFont("Arial", 10 + i * 2): Next ;>>>>>>>>>> Programmablauf <<<<<<<<<< turnanim = 0 turndir = 0 pos = 0 steps# = 360 / items / 5 Repeat ;Eingaben If KeyDown(203) And turnanim = 0 Then turnanim = 1: t = 0: turndir = -1 If KeyDown(205) And turnanim = 0 Then turnanim = 1: t = 0: turndir = 1 If KeyHit(1) Then End ;Drehung If turnanim = 1 Then If t < 360 / items - s Then steps = steps * 0.9: If steps < 5 Then steps = 5 t = t + steps Else pos = (items + pos - turndir) Mod items turnanim = 0 turndir = 0 End If End If ;Ausgaben Cls i1 = (items - 1) / 2 + 1 i2 = (items - 1) / 2 While i2 >= 0 If i1 < items Then drawItem items, i1, t, turndir, mx, my, mr, mv, pos, fontsRes, mItem[(pos + i1) Mod (items)] drawItem items, i2, t, turndir, mx, my, mr, mv, pos, fontsRes, mItem[(pos + i2) Mod (items)] i1 = i1 + 1 i2 = i2 - 1 Wend SetFont fonts(10) Text 0, 0, "Gewählt: " + pos Flip(0) WaitTimer fps_timer Forever Function drawItem(items, i, t, td, mx, my, mr, mv#, pos, fr, txt$) x = mx - Sin(360 / items * i + (t * td)) * mr y = my + Cos(360 / items * i + (t * td)) * mr * mv SetFont fonts(Int((Cos(360 / items * i + (t * td)) * fr + fr) / 2)) sw = StringWidth(txt$) sh = StringHeight(txt$) Color 55, 155, 255: Rect x - sw / 2 - 3, y - sh / 2 - 3, sw + 6, sh + 6 Color 0, 0, 255: Rect x - sw / 2 - 3, y - sh / 2 - 3, sw + 6, sh + 6, 0 Color 255, 255, 255: Text x - sw / 2, y - sh / 2, txt$ End Function |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
![]() |
jonas1996 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eure Codes sind super!!! ![]() Ich habe zwar 3D , finde aber das 2D Karussel besser! Die anderen beiden sind aber auch gut. Mfg jonas1996 |
||
iLive4myLive.de.tl
programmieren123.de.tl |
![]() |
the FR3AK |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() |
||
aletes |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
abgesehen davon, dass der thread schon vor 1 1/2 jahren abgelaufen ist, jonas1996 | ||
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es gibt fast immer irgendeinen, der die alten Threads wieder rausholt... ![]() |
||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group