kompass/rader
Übersicht

![]() |
biggicekeyBetreff: kompass/rader |
![]() Antworten mit Zitat ![]() |
---|---|---|
hallo,
hat jemand eine idee wie man einen solchen (siehe bild) kompass umsetzen könnte? also die berechnung? habe mir überlegt ein langes bild mit allen buchstaben zu machen und dieses vor dem bildschirm hin und herzuschieben. aber wie bekomme ich die übergänge? danke schonmal |
||
#45 www.icekeyunlimited.de www.starcrusade.de
Gewinner BCC#17 !!! mit dotkiller Nothing more to register - you've cleaned us out![/size] |
![]() |
TheProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hatte gerade Langeweile und hab mal was geschrieben. ^^
Code: [AUSKLAPPEN] Graphics3D 800,600,0,1 SetBuffer BackBuffer() camera = CreateCamera() ; Kompass compass_tex = CreateCompassTexture() hud_tex = CreateHUDTexture() hud_sprite = CreateSprite() compass_sprite = CreateCompassSprite() EntityBlend hud_sprite,3 EntityBlend compass_sprite,3 EntityOrder hud_sprite,-1 EntityOrder compass_sprite,-1 EntityFX hud_sprite,1+8 EntityFX compass_sprite,1+8 EntityTexture hud_sprite,hud_tex EntityTexture compass_sprite,compass_tex EntityParent hud_sprite,camera EntityParent compass_sprite,camera PositionEntity hud_sprite,0,3,5 PositionEntity compass_sprite,0,3,5 ScaleSprite hud_sprite,512*0.005,32*0.005 ScaleEntity compass_sprite,512*0.005,32*0.005,1 ; Umgebung For I = 1 To 100 sphere = CreateSphere() EntityColor sphere,Rand(0,255),Rand(0,255),Rand(0,255) PositionEntity sphere,Rnd(-20,20),Rnd(-20,20),Rnd(-20,20) Next ; Licht light = CreateLight() RotateEntity light,0,90,0 While Not KeyHit(1) RenderWorld ; Kamera yaw# = yaw# - MouseXSpeed()*0.1 pitch# = pitch# + MouseYSpeed()*0.1 MoveMouse GraphicsWidth()/2,GraphicsHeight()/2 RotateEntity camera,pitch#,yaw#,0 ; >> Kompass-Texture positionieren << PositionTexture compass_tex,EntityYaw(camera)/360.0,0 Flip Wend ClearWorld End Function CreateCompassTexture() tex = CreateTexture(2048,32) SetBuffer TextureBuffer(tex) Color 0,255,0 Rect 0,0,2048,1,1 font = LoadFont("Lucida Console",18) SetFont font c=-5 n=45 Repeat Rect Float(c) * (2048.0/360.0),1,1,7,1 If c >= 360 Then Exit Select n Case 45 Text Float(n) * (2048.0/360.0),13,"N",1,0 Case 135 Text Float(n) * (2048.0/360.0),13,"O",1,0 Case 225 Text Float(n) * (2048.0/360.0),13,"S",1,0 Case 315 Text Float(n) * (2048.0/360.0),13,"W",1,0 End Select c = c + 10 n = n + 90 Forever FreeFont font SetBuffer BackBuffer() Return tex End Function Function CreateHUDTexture() tex = CreateTexture(512,32) SetBuffer TextureBuffer(tex) Color 0,255,0 Rect 0,0,1,32 Rect 511,0,1,32 Rect 1,0,8,1 Rect 1,31,8,1 Rect 503,0,8,1 Rect 503,31,8,1 For I = 0 To 3 Line 256-I,0,256,5 Line 256+I,0,256,5 Next SetBuffer BackBuffer() Return tex End Function Function CreateCompassSprite() m = CreateMesh() s = CreateSurface(m) AddVertex(s,-1,-1,0,0,1) AddVertex(s,1,-1,0,0.25,1) AddVertex(s,-1,1,0,0,0) AddVertex(s,1,1,0,0.25,0) AddTriangle(s,0,2,1) AddTriangle(s,2,3,1) UpdateNormals m Return m End Function Du musst einfach nur die Kompass-Texture richtig positionieren. (PositionTexture) Den Winkel des Spielers ermittelst du mit EntityYaw(). Mfg TheProgrammer |
||
aktuelles Projekt: The last day of human being |
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
sorry für die dumme frage, aber sollten Texturen nicht immer quadratisch sein, damit sie nicht extra gestreckt werden müssen? | ||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
biggicekey |
![]() Antworten mit Zitat ![]() |
---|---|---|
sehr geil TheProgrammer. das ging schnell. vielen dank. | ||
#45 www.icekeyunlimited.de www.starcrusade.de
Gewinner BCC#17 !!! mit dotkiller Nothing more to register - you've cleaned us out![/size] |
![]() |
TheProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Texturen müssen nicht immer quadratisch sein. Sie müssen nur Auflösungen von 32, 64, 128, etc. haben. Dabei ist die Breite aber von der Länge unabhängig. ![]() |
||
aktuelles Projekt: The last day of human being |
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
cool... wieder was dazu gelernt... ist ja eigentlich schon peinlich, dass ich das nicht wusste... trozdem seehhhrr hilfreich!
MfG |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
sie müssen nicht quadratisch sein, werden aber von der grafikkarte eh wieder in quadrate konvertiert. Wie dabei die u und v koordinaten sind, das ist der textur vollkommen egal. | ||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
sorry für doppelpost, aber hab grad nochmal das ganze in 2D versucht... ist noch nicht ganz perfekt, aber ich muss erstmal los, vielleicht perfektioniere ichs nachher noch!
Code: [AUSKLAPPEN] Graphics 800,600,32,2 SetBuffer BackBuffer() HUD = CreateHUD() Compass = CreateCompass(HUD) While Not KeyDown(1) If KeyDown(203) Then winkel=(winkel+1) Mod 360 If KeyDown(205) Then winkel=(winkel-1) Mod 360 Text 0,0,winkel UpdateCompass(HUD,Compass,winkel,400,0) Flip Cls Wend End Function CreateHUD(width=600,height=50) Local image = CreateImage(width,height) SetBuffer ImageBuffer(image) Color 0,120,0 Rect 0,0,width,1 Rect 0,0,1,height Rect width-1,0,1,height Color 255,255,255 SetBuffer BackBuffer() Return image End Function Function CreateCompass(HUD,segments=10,distance=100) Local width = ImageWidth(HUD) Local height = ImageHeight(HUD) Local image = CreateImage((segments*4+3)*distance,height) SetBuffer ImageBuffer(image) Color 0,200,0 For i=0 To segments*4+3 Rect i*distance,0,1,height-40 If i=0 Then Text i*distance-StringWidth("N")/2,height-39,"N" If Float(i)/Float(segments)=1 Then Text i*distance-StringWidth("O")/2,height-39,"O" If Float(i-1)/Float(segments)=2 Then Text i*distance-StringWidth("S")/2,height-39,"S" If Float(i-2)/Float(segments)=3 Then Text i*distance-StringWidth("W")/2,height-39,"W" If Float(i-3)/Float(segments)=4 Then Text i*distance-StringWidth("N")/2,height-39,"N" Next Color 255,255,255 SetBuffer BackBuffer() Return image End Function Function UpdateCompass(HUD,Compass,winkel,x,y) winkel = winkel Mod 360 Local width = ImageWidth(HUD) Local height = ImageHeight(HUD) Local width2 = ImageWidth(Compass) Local image = CreateImage(width,height) SetBuffer ImageBuffer(image) TileImage Compass,(width2*(Float(winkel)/Float(360)))+width/2,0 DrawImage HUD,0,0 SetBuffer BackBuffer() DrawImage image,x-width/2,y FreeImage image End Function MfG |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
snörkl |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
sorry cause offtopic, aber
spielst du AA oder hast du einfach nur ein bild in google gefunden? |
||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
so, nun nochmal perfekt:
Code: [AUSKLAPPEN] Graphics 800,600,32,2 SetBuffer BackBuffer() HUD = CreateHUD() Compass = CreateCompass(HUD) While Not KeyDown(1) If KeyDown(203) Then winkel=(winkel+1) Mod 360:Delay 50 If KeyDown(205) Then winkel=(winkel-1) Mod 360:Delay 50 Text 0,0,winkel UpdateCompass(HUD,Compass,winkel,400,0) Flip Cls Wend End Function CreateHUD(width=600,height=50) Local image = CreateImage(width,height) SetBuffer ImageBuffer(image) Color 0,120,0 Rect 0,0,width,1 Rect 0,0,1,height Rect width-1,0,1,height Color 255,255,255 SetBuffer BackBuffer() Return image End Function Function CreateCompass(HUD,segments=10,distance=100,fontname$="Dungeon") Local width = ImageWidth(HUD) Local height = ImageHeight(HUD) Local image = CreateImage((segments*4+4)*distance,height) Local font = LoadFont(fontname$,height-(height-29)) SetFont font SetBuffer ImageBuffer(image) Color 0,200,0 For i=0 To segments*4+4 Rect i*distance,0,1,height-40 If i =0 Then Rect i*distance-2,0,4,height-30 Text i*distance-StringWidth("N")/2,height-29,"N" ElseIf Float(i-1)/Float(segments)=1 Then Rect i*distance-2,0,4,height-30 Text i*distance-StringWidth("O")/2,height-29,"O" ElseIf Float(i-2)/Float(segments)=2 Then Rect i*distance-2,0,4,height-30 Text i*distance-StringWidth("S")/2,height-29,"S" ElseIf Float(i-3)/Float(segments)=3 Then Rect i*distance-2,0,4,height-30 Text i*distance-StringWidth("W")/2,height-29,"W" ElseIf Float(i-4)/Float(segments)=4 Then Rect i*distance-2,0,4,height-30 Text i*distance-StringWidth("N")/2,height-29,"N" EndIf Next Color 255,255,255 SetBuffer BackBuffer() FreeFont font Return image End Function Function UpdateCompass(HUD,Compass,winkel,x,y) winkel = winkel Mod 360 Local width = ImageWidth(HUD) Local height = ImageHeight(HUD) Local width2 = ImageWidth(Compass) Local image = CreateImage(width,height) SetBuffer ImageBuffer(image) TileImage Compass,(width2*(Float(winkel)/Float(360)))+width/2,0 DrawImage HUD,0,0 SetBuffer BackBuffer() DrawImage image,x-width/2,y FreeImage image End Function |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
biggicekey |
![]() Antworten mit Zitat ![]() |
---|---|---|
snörkl hat Folgendes geschrieben: sorry cause offtopic, aber
spielst du AA oder hast du einfach nur ein bild in google gefunden? ich bin aktiver AA Spieler. meinermeinung eines der besten spiele dieser art. den von mir gezeigten kompass gibt es in der neuer version ja nichtmehr. trotzdem ein fantastisches spiel. |
||
#45 www.icekeyunlimited.de www.starcrusade.de
Gewinner BCC#17 !!! mit dotkiller Nothing more to register - you've cleaned us out![/size] |
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
sorry aber...
OFF TOPIC: Ich Spiele auch Americas Army! ![]() Mal ne Runde zusammen zocken? ![]() heiße =BA=Episode-666- häufiger Unruhestifter auf: Urban Assault / Pipeline / CSAR / eigentlich alle ^^ aber Urban ist die geilste. Hast du einen Clan? MfG. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group