3 Probleme auf einmal (Überraschungsei)

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

phpmännchen

Betreff: 3 Probleme auf einmal (Überraschungsei)

BeitragMi, Sep 13, 2006 6:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo liebe BB Gemeinschaft,
ich habe hier ein kleines Programmchen geschrieben und habe
3 Dinge mit denen ich nicht mehr weiter komme.

1. Ich möchte das der Beenden Button bei betätigung mit der Maus das Programm schliesst. Habs schon mit MouseHit versucht aber nicht hinbekommen.

2. Bei Mouseover bettet sich leider nur der Start Buttom ein und der Beenden Buttom leider nicht. Wie kommt dies? Besser währe es wenn diese Funktion beim betätigen mit der Maus funktioniert aber das bekomme ich erst recht noch nicht hin.

3. Wie ist es möglich nach betätigung des start Buttoms in ein anderes Script zu springen (Das alte also beenden und ein anderes aufrufen ohne das das Fenster schliesst.

Hier habe ich meinen Code mal beigefügt.
Er funst auch soweit bis auf die drei Probleme.
Vieleicht (ganz bestimmt habt Ihr nen rat)

Code: [AUSKLAPPEN]

Graphics 1024,768,16,2

kanal = PlayMusic("start.mp3")


SetBuffer BackBuffer()
HidePointer
Maus = LoadImage("maus.bmp")
Global Wahl = 0


Repeat
Cls

bildvariable = LoadImage("1.bmp")
DrawBlock bildvariable, 110, 80
MaskImage bildvariable, r, g, b

Mx=MouseX()
My=MouseY()



Button(680,600,100,20,"Start",58,58,58,255,255,255,0,1)
Button(780,600,100,20,"Beenden",58,58,58,255,255,255,0,2)




If RectsOverlap(Mx,My,1,1,680,600,100,20) Then Wahl = 1 : Text
 420,384,"Gleich gehts los!"
If RectsOverlap(Mx,My,1,1,780,600,100,20)  Then  Wahl = 2 : Text
384,384,"Wollen Sie Mara wirklich schon beenden?"

;------------------Maus Zeichen-----------------------------------
Color 0,0,0
   Rect Mx,My,1,1,1
DrawImage Maus,Mx,My
;-----------------------------------------------------------------
Color 255,255,255
Text 20,20,"Wahl : "+ Wahl

Flip
Until KeyHit(1)


Function Button(Bx,By,weite,hoehe,Txt$,Rot,Gruen,Blau,Rot2,Gruen2,Blau2,Defaultnummer,
Wahln)


If Wahl = wahln Then
Color Rot,Gruen,Blau
Rect Bx,By,weite,hoehe,1
Color 120,120,120
Line Bx,By,Bx+weite,By
Line Bx,By+1,Bx+weite,By+1
Line Bx+1,By+hoehe,Bx+1,By
Line Bx,By+hoehe,Bx,By
Color 255,255,255
Line Bx,By+hoehe,Bx+weite,By+hoehe
Line Bx,By+hoehe-1,Bx+weite,By+hoehe-1
Line Bx+weite,By,Bx+weite,By+hoehe
Line Bx+weite-1,By+2,Bx+weite-1,By+hoehe-2

Else


Color Rot,Gruen,Blau
Rect Bx,By,weite,hoehe,1
Color 255,255,255
Line Bx,By,Bx+weite,By
Line Bx,By+1,Bx+weite,By+1
Line Bx+1,By+hoehe,Bx+1,By
Line Bx,By+hoehe,Bx,By
Color 120,120,120
Line Bx,By+hoehe,Bx+weite,By+hoehe
Line Bx,By+hoehe-1,Bx+weite,By+hoehe-1
Line Bx+weite,By,Bx+weite,By+hoehe
Line Bx+weite-1,By+2,Bx+weite-1,By+hoehe-2

EndIf



If Not RectsOverlap(Mx,My,1,1,Bx,By,weite,hoehe) Then Wahl = 0

Color Rot2,Gruen2,Blau2
Text Bx+(weite/2),By+(hoehe/2),Txt$,1,1

End Function


Gruß

robotx

BeitragMi, Sep 13, 2006 11:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier probier dies mal aus!

Das RectsOverlap mit dem du prüfst, ob der Mauszeiger über dem Button ist, habe ich in die Function Button () gemacht. Somit werden beide Buttons überprüft.

Sonst ist der Code eigentlich selbsterklärend. Wink


Zu Drittens: Schau mal hier https://www.blitzforum.de/foru...pielaufbau

Code: [AUSKLAPPEN]

Graphics 1024,768,16,2
SetBuffer BackBuffer()
HidePointer


Global Wahl = 0
Global mh_1
Global Mx,My


Maus = LoadImage("maus.bmp")


;bildvariable = LoadImage("1.bmp")


Repeat
Cls


;DrawBlock bildvariable, 110, 80
;MaskImage bildvariable, r, g, b

Mx=MouseX()
My=MouseY()
mh_1 = MouseHit(1)

Button(780,600,100,20,"Beenden",58,58,58,255,255,255,0,2)
Button(680,600,100,20,"Start",58,58,58,255,255,255,0,1)







;------------------Maus Zeichen-----------------------------------
Color 0,0,0
   Rect Mx,My,1,1,1
DrawImage Maus,Mx,My
;-----------------------------------------------------------------
Color 255,255,255
Text 20,20,"Wahl : "+ Wahl

Flip
Until KeyHit(1)
End


Function Button(Bx,By,weite,hoehe,Txt$,Rot,Gruen,Blau,Rot2,Gruen2,Blau2,Defaultnummer,Wahln)

If RectsOverlap(Mx,My,1,1,Bx,By,weite,hoehe)    Then    
      
      Wahl = wahln
      If Wahl = 1 Then
         Text 420,384,"Gleich gehts los!"
      ElseIf Wahl = 2 Then
         Text 384,384,"Wollen Sie Mara wirklich schon beenden?"
      Endif
            
      Color Rot,Gruen,Blau
         Rect Bx,By,weite,hoehe,1
      Color 120,120,120
         Line Bx,By,Bx+weite,By
         Line Bx,By+1,Bx+weite,By+1
         Line Bx+1,By+hoehe,Bx+1,By
         Line Bx,By+hoehe,Bx,By
      Color 255,255,255
         Line Bx,By+hoehe,Bx+weite,By+hoehe
         Line Bx,By+hoehe-1,Bx+weite,By+hoehe-1
         Line Bx+weite,By,Bx+weite,By+hoehe
         Line Bx+weite-1,By+2,Bx+weite-1,By+hoehe-2
         
   If mh_1 Then
      If Wahl = 1 Then
         
         Spielfunction ()
      ElseIf Wahl=2 Then
         Endefunction()
      Endif
   Endif


Endif


IF Wahl <> wahln Then

Color Rot,Gruen,Blau
Rect Bx,By,weite,hoehe,1
Color 255,255,255
Line Bx,By,Bx+weite,By
Line Bx,By+1,Bx+weite,By+1
Line Bx+1,By+hoehe,Bx+1,By
Line Bx,By+hoehe,Bx,By
Color 120,120,120
Line Bx,By+hoehe,Bx+weite,By+hoehe
Line Bx,By+hoehe-1,Bx+weite,By+hoehe-1
Line Bx+weite,By,Bx+weite,By+hoehe
Line Bx+weite-1,By+2,Bx+weite-1,By+hoehe-2

EndIf




If Not RectsOverlap(Mx,My,1,1,Bx,By,weite,hoehe) Then Wahl = 0

Color Rot2,Gruen2,Blau2
Text Bx+(weite/2),By+(hoehe/2),Txt$,1,1

End Function



Function Spielfunction ()
FlushKeys ()

Repeat
Cls
Text 100,100,"Wir sind im Spiel!!"
Flip
Until KeyHit (1)
End

End Function

Function Endefunction ()
End
End Function


mfg robotx
www.botbomb.robotzgames.de
www.robotzgames.de
  • Zuletzt bearbeitet von robotx am Mi, Sep 13, 2006 11:05, insgesamt einmal bearbeitet
 

Omenaton_2

BeitragMi, Sep 13, 2006 11:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast nicht den ganzen Code gepostet, die Definition von manchen Variablen ist nicht zu sehen und wo ist der Teil, wo Maustaste gechecked wird ? So unvollständig kann man nur schwer ein Urteil machen.
Ich habe mir nicht alles genau angeschaut (keine Zeit, keine Lust), aber etwas kann ich sagen.


Die 2 Zeilen unten gehören auf keinen Fall in eine Schleife, verschiebe sie an den Anfang des Programmes, soll nur 1 Mal ausgeführt werden:
bildvariable = LoadImage("1.bmp")
MaskImage bildvariable, r, g, b

Grunsätzlich sollten Grafiken und Sounds nur ein einziges Mal geladen werden und zwar am Anfang, als Vorbereitung vor dem eigentlichen Programm.

Ich persönlich habe Buttons noch niemals mit ImagesOverlap gemacht, sondern ich checke immer die Koordinaten. Wenn der Mauszeiger innerhalb der Linken oberen und der rechten unteren Ecke des Buttons ist und die Maustaste betätigt wird, dann wurde der Button gedrückt. Das ist übersichtlicher. Aber, mit ImagesOverlap kann das auch funktionieren, kein Problem.
 

phpmännchen

Betreff: Danke erstmal, Funst soweit....

BeitragMi, Sep 13, 2006 11:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Jippi...

Danke Danke... an ---> robotx

Der text is jetzt soweit klar, habe gesehen was ich falsch gemacht habe.
Aber wie stelle ich jetzt den wechsel an?
Code: [AUSKLAPPEN]
Function Spielfunction ()
FlushKeys ()

Repeat
Cls
Text 100,100,"Wir sind im Spiel!!"
Flip
Until KeyHit (1)
End

End Function


hier kann ich include ja nicht machen.
Wie sag ich ihm nun das er zu gras.bb wechselt?
Währe um Hilfe stellung sehr begeistert.

Und Omenaton_2
das is das ganze Script was geladen ist! :-)

robotx

BeitragMi, Sep 13, 2006 11:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Include Befehl kopiert im Grunde nur den Code aus der anderen Datei. Deshalb darfst du, natürlich keine Globals, Functionen usw. in der Include haben, wenn du sie in einer Function lädst. Ansonsten geht es auch eine Include in einer Function zu laden.
Deshalb solange wir nicht wissen, was in der Include steht kann man dir auch nicht wirklich helfen.
Wenn ich eine Include benutze, lade ich sie meistens ganz am Anfang, weil ich nur Functionen drin stehen habe.

=> kurze Rede, kurzer Sinn: Solange wir nicht wissen, was in deiner Gras.bb steht und was du mit ihr machen willst, können wir nur herumraten und nichts konkretes sagen!

mfg robotx
www.botbomb.robotzgames.de
www.robotzgames.de
 

phpmännchen

Betreff: hier die Gras.bb

BeitragMi, Sep 13, 2006 12:02
Antworten mit Zitat
Benutzer-Profile anzeigen
In diese Datei soll gesprungen werden!

Hier der Code (dort sind Global drinnen)

Code: [AUSKLAPPEN]
Graphics3D 1024,768,16,1
SetBuffer BackBuffer()
WBuffer 0

Global fps_frames,fps_ms,fps_anzeige#

; Kamrea und so einrichten
Global main_pivot = CreatePivot()
Global cam = CreateCamera(main_pivot)
PositionEntity cam,256,0,460
RotateEntity cam,0,180,0
CameraRange cam,1,300
CameraFogMode cam,1
CameraFogRange cam,150,300
CameraFogColor cam,190,210,245
EntityType cam, 2
MoveEntity cam,0,3,-3
TurnEntity cam,20,0,0

; Skybox laden
Global skybox = LoadSkyBox(main_pivot)

; Licht setzen
main_light = CreateLight()
MoveEntity main_light,20,50,0
PointEntity main_light, main_pivot

; Terrain erstellen
ter = LoadTerrain("gfx/hmap2.bmp")
ScaleEntity ter,20,50,20
TerrainDetail ter,1500,1
TerrainShading ter,1

; Terraintextur laden
ter_tex = LoadTexture("gfx/tex1.bmp")
EntityTexture ter, ter_tex
ScaleTexture ter_tex,5,5

; Gras erstellen
Dim grass(1,1)
Global gtex
CreateGrass(ter,ter_tex,"gfx/gras.png")

; Nen paar Variablen setzen
; .. für Zeit
Global gaspeed#
lastmsc = MilliSecs()

; .. für Gras
Global lod = 1
wogen = 1

Repeat
   ; Echtzeitberechnungen
   msc = MilliSecs()
   gaspeed# = Float#(msc-lastmsc)/20.00
   lastmsc = msc
   
   ; Kamereasteuerung
   TurnEntity cam,MouseYSpeed(),-MouseXSpeed(),0
   MoveMouse 400,300
   RotateEntity cam,EntityPitch(cam),EntityYaw(cam),0
   MoveEntity cam,(KeyDown(205)-KeyDown(203))*gaspeed#/2,0,(KeyDown(200)-KeyDown(208))*gaspeed#/2
   PositionEntity cam,EntityX(cam),TerrainY(ter,EntityX(cam),0,EntityZ(cam))+6,EntityZ(cam)
   
   ; Umgebung updaten
   UpdateEnviron()
   
   If Rand(0,1) Then
      ;Gras-LOD berechnen (Entferntes Gras nich zeichnen)
      UpdateGrass(ter)
   EndIf
   
   ; Gras im Wind wogen lassen
   If wogen
      RotateTexture gtex,Cos(Msc/10)*2.2
   Else
      RotateTexture gtex,0
   EndIf
   
   ; Welt rendern
   RenderWorld()
   
   ; Ein-/Ausschalten von verschiedenen Dingen
   If KeyHit(2) Then lod = 1 - lod ; Dem Gras-LOD
   If KeyHit(3) Then wogen = 1 - wogen ; Dem Gras-Wogen
   If KeyHit(17)Then wire = 1 - wire : WireFrame wire ; Wireframemodus ein/aus
   
   
   ; Texte teichnen... Zu erst die Schatten, versteht sich
   Color 0,0,0
   Text 2,2,"Tris: "+TrisRendered()
   Text 2,17,"FPS: "+util_fps()
   Text 302,2,"LOD(1): "+lod+"  Wogen(2): "+wogen + "  Wireframe(W): "+wired
   Text 862,752,"test"
   
   Color 255,255,255
   Text 0,0,"Tris: "+TrisRendered()
   Text 0,15,"FPS: "+Int(fps_anzeige)
   Text 300,0,"LOD(1): "+lod+"  Wogen(2): "+wogen + "  Wireframe(W): "+wired
   Text 860,750,"test"
   Flip 0
Until KeyHit(1)
End

Function UpdateEnviron()
   PositionEntity skybox,EntityX(cam,0),EntityY(cam,0),EntityZ(cam,0)
   TurnEntity skybox,0,.01*gaspeed#,0
End Function

Function LoadSkyBox( parent=0 )
   m=CreateMesh(parent)
   
   ;front face
   b=LoadBrush( "gfx/sky_f.bmp",49 )
   s=CreateSurface( m,b )
   AddVertex s,-1,+1,-1,0,0:AddVertex s,+1,+1,-1,1,0
   AddVertex s,+1,-1,-1,1,1:AddVertex s,-1,-1,-1,0,1
   AddTriangle s,0,1,2:AddTriangle s,0,2,3
   FreeBrush b
   ;right face
   b=LoadBrush( "gfx/sky_l.bmp",49 )
   s=CreateSurface( m,b )
   AddVertex s,+1,+1,-1,0,0:AddVertex s,+1,+1,+1,1,0
   AddVertex s,+1,-1,+1,1,1:AddVertex s,+1,-1,-1,0,1
   AddTriangle s,0,1,2:AddTriangle s,0,2,3
   FreeBrush b
   ;back face
   b=LoadBrush( "gfx/sky_b.bmp",49 )
   s=CreateSurface( m,b )
   AddVertex s,+1,+1,+1,0,0:AddVertex s,-1,+1,+1,1,0
   AddVertex s,-1,-1,+1,1,1:AddVertex s,+1,-1,+1,0,1
   AddTriangle s,0,1,2:AddTriangle s,0,2,3
   FreeBrush b
   ;left face
   b=LoadBrush( "gfx/sky_r.bmp",49 )
   s=CreateSurface( m,b )
   AddVertex s,-1,+1,+1,0,0:AddVertex s,-1,+1,-1,1,0
   AddVertex s,-1,-1,-1,1,1:AddVertex s,-1,-1,+1,0,1
   AddTriangle s,0,1,2:AddTriangle s,0,2,3
   FreeBrush b
   ;top face
   b=LoadBrush( "gfx/sky_u.bmp",49 )
   s=CreateSurface( m,b )
   AddVertex s,-1,+1,+1,0,1:AddVertex s,+1,+1,+1,0,0
   AddVertex s,+1,+1,-1,1,0:AddVertex s,-1,+1,-1,1,1
   AddTriangle s,0,1,2:AddTriangle s,0,2,3
   FreeBrush b
   ;bottom face   
   b=LoadBrush( "gfx/sky_d.bmp",49 )
   s=CreateSurface( m,b )
   AddVertex s,-1,-1,-1,1,0:AddVertex s,+1,-1,-1,1,1
   AddVertex s,+1,-1,+1,0,1:AddVertex s,-1,-1,+1,0,0
   AddTriangle s,0,1,2:AddTriangle s,0,2,3
   FreeBrush b
   
   ScaleMesh m,5,5,5
   EntityOrder m,1
   FlipMesh m
   EntityFX m,1
   Return m
End Function

; Diese funktion erstellt das Gras
Function CreateGrass(ter,ttex,texp$)
   Local vert[3]
   gpiv = CreatePivot()
   tex = LoadTexture(texp,2)
   gtex = tex
   
   ; Das Gras besteht aus 10x10 Meshs.
   Dim grass(9,9)
   For sx = 0 To 9
      For sz = 0 To 9
         gmesh = CreateMesh(gpiv)
         EntityTexture gmesh,tex
         gsur = CreateSurface(gmesh)
         PositionEntity gmesh,sx*64,0,sz*64
         EntityFX gmesh,1+16+2
         
         ; In jedem Mesh gibt's 16x16 Sprites
         For x = 0 To 15
            For z = 0 To 15
               vx1# = x*4+Rnd(-8,8)
               vz1# = z*4+Rnd(-8,8)
               vx2# = x*4+Rnd(-8,8)
               vz2# = z*4+Rnd(-8,8)
               
               vert[0] = AddVertex(gsur,vx1,TerrainY(ter,vx1+sx*64,0,vz1+sz*64)-.1,vz1,0,.9)
               vert[1] = AddVertex(gsur,vx1,TerrainY(ter,vx1+sx*64,0,vz1+sz*64)+Rnd(3,5.5),vz1,0,0)
               vert[2] = AddVertex(gsur,vx2,TerrainY(ter,vx2+sx*64,0,vz2+sz*64)-.1,vz2,.9,.9)
               vert[3] = AddVertex(gsur,vx2,TerrainY(ter,vx2+sx*64,0,vz2+sz*64)+Rnd(3,5.5),vz2,.9,0)
               
               AddTriangle(gsur,vert[0],vert[1],vert[2])
               AddTriangle(gsur,vert[1],vert[2],vert[3])
               
               r = Rand(75,85)
               g = Rand(195,230)
               b = Rand(75,85)
               
               VertexColor gsur,vert[0],r,g,b
               VertexColor gsur,vert[1],r,g,b
               VertexColor gsur,vert[2],r,g,b
               VertexColor gsur,vert[3],r,g,b
            Next
         Next
         grass(sx,sz) = gmesh
      Next
   Next
   Return gpiv
End Function

; Updatet das Gras während des Ausführens
Function UpdateGrass(ter)
   If lod = 0 Then
      ; Ist das LOD deaktiviert, so werden alle Grasmeshs einfach so angezeigt
      For x = 0 To 9
         For z = 0 To 9
            ShowEntity grass(x,z)
            PositionEntity grass(x,z),x*64,TerrainY(ter,x,0,z),z*64
         Next
      Next
   Else
      ; Ist das LOD aktiviert, so werden weiter entfernte Grasmeshs versteckt, davor tiefer gezeichnet
      For x = 0 To 9
         For z = 0 To 9
            dist# = Sqr((EntityX(cam,0)-x*64)^2+(EntityZ(cam,0)-z*64)^2)
            If dist<= 250
               ShowEntity grass(x,z)
               PositionEntity grass(x,z),x*64,TerrainY(ter,x,0,z)-dist/60+.5,z*64
            Else
               HideEntity grass(x,z)
            EndIf
         Next
      Next
   EndIf
End Function

Function Util_Fps()
   fps_frames=fps_frames+1
   If MilliSecs()-fps_ms >= 1000 Then
      fps_anzeige=fps_frames
      fps_frames=0
      fps_ms=MilliSecs()
   EndIf
   Return fps_anzeige
End Function


Ich möchte halt vom menü in diese Datei wechseln.
 

Ava

Gast

BeitragMi, Sep 13, 2006 12:22
Antworten mit Zitat
Du kannst eine Include auch in eine Function einfügen.

Code: [AUSKLAPPEN]
Function blaah()

Include blupp

EndFunction


Oder Du deklarierst in Deiner Include eine Hauptfunktion, fügst sie am Anfang des Programmcodes ein und rufst dann jene Funktion an entsprechender Stelle auf.

Übrigens isses kein Skript. Wink
 

phpmännchen

BeitragMi, Sep 13, 2006 13:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ava hat Folgendes geschrieben:
Du kannst eine Include auch in eine Function einfügen.

Code: [AUSKLAPPEN]
Function blaah()

Include blupp

EndFunction


Oder Du deklarierst in Deiner Include eine Hauptfunktion, fügst sie am Anfang des Programmcodes ein und rufst dann jene Funktion an entsprechender Stelle auf.

Übrigens isses kein Skript. :wink:


Include würde ich ja gerne machen, geht aber wegen " Global " nicht, sowie man das " Global " umwandeln kann in grass.bb so das es geht!

skey-z

BeitragMi, Sep 13, 2006 14:26
Antworten mit Zitat
Benutzer-Profile anzeigen
such mal bei faq und tutorials nach dem autor suco-x, er hat nen tutorial über Aufbau und strukturierung eines Spiels geschrieben, dafür wirst du fast deinen kompletten Code neu schrieben müssen, aber es wird sich sehr wahrscheinlich lohnen.
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

robotx

BeitragMi, Sep 13, 2006 15:00
Antworten mit Zitat
Benutzer-Profile anzeigen
So, alles in einem (ohne Include):

Code: [AUSKLAPPEN]

Graphics3D 1024,768,16,1
SetBuffer BackBuffer()
WBuffer 0
HidePointer


Const game_pause = 1
Const game_menue = 2
Const game_haupt = 3
Const game_over  = 4

Global game_zustand = game_menue



;--------------------------------------------------------------------------------------------------------------
;---Hier kommen alle Globalen Variablen hin-------------------------------



;-----------------------------------------------------------------------
;Für das Menue


Global Maus = LoadImage("maus.png")
;Global bildvariable = LoadImage("1.bmp")

Global Wahl = 0
Global mh_1
Global Mx,My

;------------------------------------------------------------------------
;Für das Hauptprogramm


; Kamrea und so einrichten
Global main_pivot = CreatePivot()
Global cam = CreateCamera(main_pivot)
PositionEntity cam,256,0,460
RotateEntity cam,0,180,0
CameraRange cam,1,300
CameraFogMode cam,1
CameraFogRange cam,150,300
CameraFogColor cam,190,210,245
EntityType cam, 2
MoveEntity cam,0,3,-3
TurnEntity cam,20,0,0



; Skybox laden
Global skybox = LoadSkyBox(main_pivot)

; Licht setzen
Global main_light = CreateLight()
MoveEntity main_light,20,50,0
PointEntity main_light, main_pivot

; Terrain erstellen
Global ter = LoadTerrain("gfx/hmap2.bmp")
ScaleEntity ter,20,50,20
TerrainDetail ter,1500,1
TerrainShading ter,1

; Terraintextur laden
Global ter_tex = LoadTexture("gfx/tex1.bmp")
EntityTexture ter, ter_tex
ScaleTexture ter_tex,5,5

; Gras erstellen
Dim grass(9,9)
Global gtex
CreateGrass(ter,ter_tex,"gfx/gras.png")


Global fps_frames,fps_ms,fps_anzeige#


; Nen paar Variablen setzen
; .. für Zeit
Global gaspeed#
Global lastmsc = MilliSecs()

; .. für Gras
Global lod = 1
Global wogen = 1




;--------------------------------------------------------------------------------------------------------------








;Wichtig. Hauptschleife. Hier wird das ganze Spiel verwaltet.

Repeat


Select game_zustand
   Case game_menue
      GameMenue()
   Case game_haupt
      GameHaupt()
   Case game_pause
      GamePause()
End Select


Until game_zustand = game_over
End;-----------------------------------------------------------------------------------------------------------------------------



Function GameMenue()

Local temp_zustand = game_zustand

FlushMouse()
FlushKeys()





Repeat
Cls
 
;-----------------------------------------------------------------------------------
   
;DrawBlock bildvariable, 110, 80
;MaskImage bildvariable, r, g, b

Mx=MouseX()
My=MouseY()
mh_1 = MouseHit(1)

Button(780,600,100,20,"Beenden",58,58,58,255,255,255,0,2)
Button(680,600,100,20,"Start",58,58,58,255,255,255,0,1)







;------------------Maus Zeichen----------------
Color 0,0,0
   Rect Mx,My,1,1,1
DrawImage Maus,Mx,My
;---------------------------------------------
Color 255,255,255
Text 20,20,"Wahl : "+ Wahl
   
   
   
   
   
;------------------------------------------------------------------------------------
   
   
   
Flip
Until game_zustand<>temp_zustand

End Function



Function Button(Bx,By,weite,hoehe,Txt$,Rot,Gruen,Blau,Rot2,Gruen2,Blau2,Defaultnummer,Wahln)

If RectsOverlap(Mx,My,1,1,Bx,By,weite,hoehe)    Then    
      
      Wahl = wahln
      If Wahl = 1 Then
         Text 420,384,"Gleich gehts los!"
      ElseIf Wahl = 2 Then
         Text 384,384,"Wollen Sie Mara wirklich schon beenden?"
      Endif
            
      Color Rot,Gruen,Blau
         Rect Bx,By,weite,hoehe,1
      Color 120,120,120
         Line Bx,By,Bx+weite,By
         Line Bx,By+1,Bx+weite,By+1
         Line Bx+1,By+hoehe,Bx+1,By
         Line Bx,By+hoehe,Bx,By
      Color 255,255,255
         Line Bx,By+hoehe,Bx+weite,By+hoehe
         Line Bx,By+hoehe-1,Bx+weite,By+hoehe-1
         Line Bx+weite,By,Bx+weite,By+hoehe
         Line Bx+weite-1,By+2,Bx+weite-1,By+hoehe-2
         
         
   If mh_1 Then
      If Wahl = 1 Then
         game_zustand = game_haupt
      ElseIf Wahl=2 Then
         game_zustand = game_over
      Endif
   Endif


Endif


IF Wahl <> wahln Then

Color Rot,Gruen,Blau
Rect Bx,By,weite,hoehe,1
Color 255,255,255
Line Bx,By,Bx+weite,By
Line Bx,By+1,Bx+weite,By+1
Line Bx+1,By+hoehe,Bx+1,By
Line Bx,By+hoehe,Bx,By
Color 120,120,120
Line Bx,By+hoehe,Bx+weite,By+hoehe
Line Bx,By+hoehe-1,Bx+weite,By+hoehe-1
Line Bx+weite,By,Bx+weite,By+hoehe
Line Bx+weite-1,By+2,Bx+weite-1,By+hoehe-2

EndIf




If Not RectsOverlap(Mx,My,1,1,Bx,By,weite,hoehe) Then Wahl = 0

Color Rot2,Gruen2,Blau2
Text Bx+(weite/2),By+(hoehe/2),Txt$,1,1

End Function



Function Endefunction ()
End
End Function











Function GamePause()

Local temp_zustand = game_zustand

FlushKeys()
FlushMouse()

Repeat
ClsColor 0,0,0
Cls
   
   Color 0,0,255
   Text GraphicsWidth()/2,GraphicsHeight()/2,"ICH BIN DIE PAUSE!!!",1,1
   
   If KeyHit(57)
      game_zustand = game_haupt
   EndIf
   
Flip
Until game_zustand<>temp_zustand

End Function








Function GameHaupt()

Local temp_zustand = game_zustand

FlushKeys()
FlushMouse()








Repeat


;------------------------------------------------------------------------------------------------------------------
;------Hier ist die Hauptschleife----------------------------------------------------------------------------------


   ; Echtzeitberechnungen
   msc = MilliSecs()
   gaspeed# = Float#(msc-lastmsc)/20.00
   lastmsc = msc
   
   ; Kamereasteuerung
   TurnEntity cam,MouseYSpeed(),-MouseXSpeed(),0
   MoveMouse 400,300
   RotateEntity cam,EntityPitch(cam),EntityYaw(cam),0
   MoveEntity cam,(KeyDown(205)-KeyDown(203))*gaspeed#/2,0,(KeyDown(200)-KeyDown(208))*gaspeed#/2
   PositionEntity cam,EntityX(cam),TerrainY(ter,EntityX(cam),0,EntityZ(cam))+6,EntityZ(cam)
   
   ; Umgebung updaten
   UpdateEnviron()
   
   If Rand(0,1) Then
      ;Gras-LOD berechnen (Entferntes Gras nich zeichnen)
      UpdateGrass(ter)
   EndIf
   
   ; Gras im Wind wogen lassen
   If wogen
      RotateTexture gtex,Cos(Msc/10)*2.2
   Else
      RotateTexture gtex,0
   EndIf
   
   ; Welt rendern
   RenderWorld()
   
   ; Ein-/Ausschalten von verschiedenen Dingen
   If KeyHit(2) Then lod = 1 - lod ; Dem Gras-LOD
   If KeyHit(3) Then wogen = 1 - wogen ; Dem Gras-Wogen
   If KeyHit(17)Then wire = 1 - wire : WireFrame wire ; Wireframemodus ein/aus
   
   
   ; Texte teichnen... Zu erst die Schatten, versteht sich
   Color 0,0,0
   Text 2,2,"Tris: "+TrisRendered()
   Text 2,17,"FPS: "+util_fps()
   Text 302,2,"LOD(1): "+lod+"  Wogen(2): "+wogen + "  Wireframe(W): "+wired
   Text 862,752,"test"
   
   Color 255,255,255
   Text 0,0,"Tris: "+TrisRendered()
   Text 0,15,"FPS: "+Int(fps_anzeige)
   Text 300,0,"LOD(1): "+lod+"  Wogen(2): "+wogen + "  Wireframe(W): "+wired
   Text 860,750,"test"
 


;------------------------------------------------------------------------------------------------------------------


If KeyHit(57)
   game_zustand = game_pause
EndIf


If KeyHit(1)
   game_zustand = game_menue
EndIf

Flip 0
Until game_zustand<>temp_zustand

End Function



Function UpdateEnviron()
   PositionEntity skybox,EntityX(cam,0),EntityY(cam,0),EntityZ(cam,0)
   TurnEntity skybox,0,.01*gaspeed#,0
End Function

Function LoadSkyBox( parent=0 )
   m=CreateMesh(parent)
   
   ;front face
   b=LoadBrush( "gfx/sky_f.bmp",49 )
   s=CreateSurface( m,b )
   AddVertex s,-1,+1,-1,0,0:AddVertex s,+1,+1,-1,1,0
   AddVertex s,+1,-1,-1,1,1:AddVertex s,-1,-1,-1,0,1
   AddTriangle s,0,1,2:AddTriangle s,0,2,3
   FreeBrush b
   ;right face
   b=LoadBrush( "gfx/sky_l.bmp",49 )
   s=CreateSurface( m,b )
   AddVertex s,+1,+1,-1,0,0:AddVertex s,+1,+1,+1,1,0
   AddVertex s,+1,-1,+1,1,1:AddVertex s,+1,-1,-1,0,1
   AddTriangle s,0,1,2:AddTriangle s,0,2,3
   FreeBrush b
   ;back face
   b=LoadBrush( "gfx/sky_b.bmp",49 )
   s=CreateSurface( m,b )
   AddVertex s,+1,+1,+1,0,0:AddVertex s,-1,+1,+1,1,0
   AddVertex s,-1,-1,+1,1,1:AddVertex s,+1,-1,+1,0,1
   AddTriangle s,0,1,2:AddTriangle s,0,2,3
   FreeBrush b
   ;left face
   b=LoadBrush( "gfx/sky_r.bmp",49 )
   s=CreateSurface( m,b )
   AddVertex s,-1,+1,+1,0,0:AddVertex s,-1,+1,-1,1,0
   AddVertex s,-1,-1,-1,1,1:AddVertex s,-1,-1,+1,0,1
   AddTriangle s,0,1,2:AddTriangle s,0,2,3
   FreeBrush b
   ;top face
   b=LoadBrush( "gfx/sky_u.bmp",49 )
   s=CreateSurface( m,b )
   AddVertex s,-1,+1,+1,0,1:AddVertex s,+1,+1,+1,0,0
   AddVertex s,+1,+1,-1,1,0:AddVertex s,-1,+1,-1,1,1
   AddTriangle s,0,1,2:AddTriangle s,0,2,3
   FreeBrush b
   ;bottom face   
   b=LoadBrush( "gfx/sky_d.bmp",49 )
   s=CreateSurface( m,b )
   AddVertex s,-1,-1,-1,1,0:AddVertex s,+1,-1,-1,1,1
   AddVertex s,+1,-1,+1,0,1:AddVertex s,-1,-1,+1,0,0
   AddTriangle s,0,1,2:AddTriangle s,0,2,3
   FreeBrush b
   
   ScaleMesh m,5,5,5
   EntityOrder m,1
   FlipMesh m
   EntityFX m,1
   Return m
End Function


; Diese funktion erstellt das Gras
Function CreateGrass(ter,ttex,texp$)
   Local vert[3]
   gpiv = CreatePivot()
   tex = LoadTexture(texp,2)
   gtex = tex
   
   ; Das Gras besteht aus 10x10 Meshs.
   
   For sx = 0 To 9
      For sz = 0 To 9
         gmesh = CreateMesh(gpiv)
         EntityTexture gmesh,tex
         gsur = CreateSurface(gmesh)
         PositionEntity gmesh,sx*64,0,sz*64
         EntityFX gmesh,1+16+2
         
         ; In jedem Mesh gibt's 16x16 Sprites
         For x = 0 To 15
            For z = 0 To 15
               vx1# = x*4+Rnd(-8,8)
               vz1# = z*4+Rnd(-8,8)
               vx2# = x*4+Rnd(-8,8)
               vz2# = z*4+Rnd(-8,8)
               
               vert[0] = AddVertex(gsur,vx1,TerrainY(ter,vx1+sx*64,0,vz1+sz*64)-.1,vz1,0,.9)
               vert[1] = AddVertex(gsur,vx1,TerrainY(ter,vx1+sx*64,0,vz1+sz*64)+Rnd(3,5.5),vz1,0,0)
               vert[2] = AddVertex(gsur,vx2,TerrainY(ter,vx2+sx*64,0,vz2+sz*64)-.1,vz2,.9,.9)
               vert[3] = AddVertex(gsur,vx2,TerrainY(ter,vx2+sx*64,0,vz2+sz*64)+Rnd(3,5.5),vz2,.9,0)
               
               AddTriangle(gsur,vert[0],vert[1],vert[2])
               AddTriangle(gsur,vert[1],vert[2],vert[3])
               
               r = Rand(75,85)
               g = Rand(195,230)
               b = Rand(75,85)
               
               VertexColor gsur,vert[0],r,g,b
               VertexColor gsur,vert[1],r,g,b
               VertexColor gsur,vert[2],r,g,b
               VertexColor gsur,vert[3],r,g,b
            Next
         Next
         grass(sx,sz) = gmesh
      Next
   Next
   Return gpiv
End Function

; Updatet das Gras während des Ausführens
Function UpdateGrass(ter)
   If lod = 0 Then
      ; Ist das LOD deaktiviert, so werden alle Grasmeshs einfach so angezeigt
      For x = 0 To 9
         For z = 0 To 9
            ShowEntity grass(x,z)
            PositionEntity grass(x,z),x*64,TerrainY(ter,x,0,z),z*64
         Next
      Next
   Else
      ; Ist das LOD aktiviert, so werden weiter entfernte Grasmeshs versteckt, davor tiefer gezeichnet
      For x = 0 To 9
         For z = 0 To 9
            dist# = Sqr((EntityX(cam,0)-x*64)^2+(EntityZ(cam,0)-z*64)^2)
            If dist<= 250
               ShowEntity grass(x,z)
               PositionEntity grass(x,z),x*64,TerrainY(ter,x,0,z)-dist/60+.5,z*64
            Else
               HideEntity grass(x,z)
            EndIf
         Next
      Next
   EndIf
End Function

Function Util_Fps()
   fps_frames=fps_frames+1
   If MilliSecs()-fps_ms >= 1000 Then
      fps_anzeige=fps_frames
      fps_frames=0
      fps_ms=MilliSecs()
   EndIf
   Return fps_anzeige
End Function


Dein Gras sieht übrigens gut aus, auch wenn ich nur mit meinen eigenen Grafiken getestet habe Very Happy Ist aber ziemlich langsam, bei mir.


@skey-z: da war ich wohl schneller, siehe oben Smile

mfg robotx
www.botbomb.robotzgames.de
www.robotzgames.de

Schranz0r

BeitragMi, Sep 13, 2006 16:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Mal abgesehen davon, das der Code von mir geklaut ist.
machs so:

Code: [AUSKLAPPEN]
Graphics 1024,768,16,2

kanal = PlayMusic("start.mp3")


SetBuffer BackBuffer()
HidePointer
Maus = LoadImage("maus.bmp")
Global Wahl = 0


Repeat
Cls

bildvariable = LoadImage("1.bmp")
DrawBlock bildvariable, 110, 80
MaskImage bildvariable, r, g, b

Mx=MouseX()
My=MouseY()






If RectsOverlap(Mx,My,1,1,680,600,100,20) Then
Wahl = 1
Text 420,384,"Gleich gehts los!"
Button(680,600,100,20,"Start",58,58,58,255,255,255,0,1)


If RectsOverlap(Mx,My,1,1,780,600,100,20)  Then 
Wahl = 2
Text 384,384,"Wollen Sie Mara wirklich schon beenden?"
Button(780,600,100,20,"Beenden",58,58,58,255,255,255,0,2)

;------------------Maus Zeichen-----------------------------------
Color 0,0,0
   Rect Mx,My,1,1,1
DrawImage Maus,Mx,My
;-----------------------------------------------------------------
Color 255,255,255
Text 20,20,"Wahl : "+ Wahl

Flip
Until KeyHit(1)


Function Button(Bx,By,weite,hoehe,Txt$,Rot,Gruen,Blau,Rot2,Gruen2,Blau2,Defaultnummer,
Wahln)


If Wahl = wahln Then
Color Rot,Gruen,Blau
Rect Bx,By,weite,hoehe,1
Color 120,120,120
Line Bx,By,Bx+weite,By
Line Bx,By+1,Bx+weite,By+1
Line Bx+1,By+hoehe,Bx+1,By
Line Bx,By+hoehe,Bx,By
Color 255,255,255
Line Bx,By+hoehe,Bx+weite,By+hoehe
Line Bx,By+hoehe-1,Bx+weite,By+hoehe-1
Line Bx+weite,By,Bx+weite,By+hoehe
Line Bx+weite-1,By+2,Bx+weite-1,By+hoehe-2

Else


Color Rot,Gruen,Blau
Rect Bx,By,weite,hoehe,1
Color 255,255,255
Line Bx,By,Bx+weite,By
Line Bx,By+1,Bx+weite,By+1
Line Bx+1,By+hoehe,Bx+1,By
Line Bx,By+hoehe,Bx,By
Color 120,120,120
Line Bx,By+hoehe,Bx+weite,By+hoehe
Line Bx,By+hoehe-1,Bx+weite,By+hoehe-1
Line Bx+weite,By,Bx+weite,By+hoehe
Line Bx+weite-1,By+2,Bx+weite-1,By+hoehe-2

EndIf



If Not RectsOverlap(Mx,My,1,1,Bx,By,weite,hoehe) Then Wahl = 0

Color Rot2,Gruen2,Blau2
Text Bx+(weite/2),By+(hoehe/2),Txt$,1,1

End Function
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!HAUPTSACH et kost VIEL!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group