Blitz Basic Funktionen in PB

Anfängerfragen zum Programmieren mit PureBasic.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Blitz Basic Funktionen in BP

Beitrag von Kaeru Gaman »

man-in-black hat geschrieben:dachte, dass es übersichtlicher ist alle Blöcke (z.B. Mausabfragen, Tastatur...) auch zusammenzuhalten.
völlig richtig.

es sind aber keine DRIN in der betreffenden Procedure.
und wenn welche reinkommen, gehören die VOR die Darstellung, dort wo das Examine ja schon war,
weil man ERST die Steuerung abfragt, DANN die Koordinaten errechnet, und ZULETZT die Objekte darstellt, gelle?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
man-in-black
Beiträge: 362
Registriert: 21.08.2006 17:39

Re: Blitz Basic Funktionen in BP

Beitrag von man-in-black »

gelle?
gelle! :bounce:
ERST die Steuerung abfragt, DANN die Koordinaten errechnet
Ich weis auch net warum, aber ich habs immer umgekehrt gemacht :oops: <)


naja, das hat aber leider nicht mehr viel mit dem Thema von NathanielBlack zu tun
und ich will ihre Frage(n) nicht weiter mit OT-Kram "würzen" :wink:
(hab alles, kann alles, weiß alles!!^^)

Bild
NathanielBlack
Beiträge: 63
Registriert: 25.12.2009 18:48

Re: Blitz Basic Funktionen in BP

Beitrag von NathanielBlack »

Ok, ich stecke es erstmal einfach hier rein. Hat zwar nichts mit dem Ursprünglichen Thema zu tun, aber ich denke der Thread ist ja "mein Frage Thread"^^

Code: Alles auswählen

Global colortilemap.w


 

InitSprite()

OpenScreen(800,600,32,"lands to conquer alpha 1.0")


StartDrawing(ScreenOutput())

For x = 0 To 9
  For y = 0 To 9
colortilemap = (Random(155)+100) * 256
     FrontColor(colortilemap)
      Box(x*50,y*50,50,50)
 


  Next
Next


StopDrawing()
FlipBuffers()
Delay(2000)
End
Ich hänge die ganze Zeit schon daran eine Tilemap nur aus grün tönen zusammen zu stellen, aber PB will nicht so, wie ich es will.
Es werden zwar grün töne erzeugt, aber viele sind einfach zu dunkel:(

Viel Dank im Vorraus,
NathanielBlack
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Blitz Basic Funktionen in BP

Beitrag von ts-soft »

Warum versuchste auch eine Farbe in ein word zu quetschen? Das paßt nie :mrgreen:

Code: Alles auswählen

Global colortilemap.i
PS: Ganzzahlen-Variablentypen, die kleiner als Integer sind sollte man nur verwenden
wenn man sie wirklich braucht, ansonsten ist Integer vorzuziehen!

Brauchen tut man sie z.B. in Structuren, Arrays, beim Pointern, serielle Kommunikation usw.
Procedure.b ist z.B. blödsinnig.
Flag.b = #True auch

Hier sind Integer vorzuziehen, verbrauchen auch nicht mehr Platz und sind schneller.
NathanielBlack
Beiträge: 63
Registriert: 25.12.2009 18:48

Re: Blitz Basic Funktionen in BP

Beitrag von NathanielBlack »

Code: Alles auswählen


InitSprite()
InitKeyboard()
InitMouse()

Global tilemapdraw.b
tilemapdraw = 0

OpenScreen(800,600,32,"lands to conquer(alpha)")

Procedure FreeGame()
ClearScreen(000000)

If tilemapdraw = 0 
For x = 0 To 9
  For y = 0 To 9
      StartDrawing(ScreenOutput())
      colortilemap = (Random(90)+15) * 256
      FrontColor(colortilemap)
      Box(x*50,y*50,50,50)
      FrontColor(RGB(110,120,100))
      Box(0,0,50,50)
      Box(150,0,50,50)
      StopDrawing()
 


  Next
Next

FlipBuffers()
tilemapdraw = 1
EndIf

EndProcedure

Repeat

ExamineKeyboard()
FreeGame()
Until KeyboardPushed(1)
End
Diesen Code hab ich mitlerweile rausbekommen. Siehe da: Meine TileMap steht! Danke euch allen!

Fragen werden wahrscheinlich später noch geng auftauchen;)

edit1:
Zum Beispiel jetzt^^ Gibt es CPU schonende Befehle? (BlitzBasic: CreateTimer und Waittimer);)
Wäre net wenn ihr mir helft, denn mein CPU schießt viel zu schnell in die höhe

mit freundlichen Grüßen,
NathanielBlack
Benutzeravatar
H.Brill
Beiträge: 497
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Blitz Basic Funktionen in BP

Beitrag von H.Brill »

Hallo NathanielBlack
Vielleicht sollte man noch erwähnen,
daß man bestimmen kann bzw. muß,
welche Art von Wert (numerisch, String, usw.)
bei ProcedureReturn zurück gegeben werden
soll. Nur bei Integer oder Long - Werten ist es egal,
da kann man den .l bzw. .i weglassen.

Beispiel :

Code: Alles auswählen

Procedure.s Test(a.s)
; Hier wird ein String zurück gegeben
Protected b.s
b = a + " !"
Procedurereturn b
EndProcedure

Procedure.l Test2(a.l)
Protected c.l
.....
ProcedureReturn c
EndProcedure 
PB 6.10
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Blitz Basic Funktionen in BP

Beitrag von Kaeru Gaman »

um die CPU zu schonen, gibt es verschiedene möglichkeiten.

einen Timer gibt es seit 4.40, der funktioniert aber nur in Verbindung mit einem Window,
also kannst du den nur bei einem WindowedScreen verwenden...

bei einem Fullscreen kannst du ein Delay(0) einbaun, das stellt zumindest sicher, dass ressourcen freigestellt werden.

ein altes Beispiel für einen billigen Timer per Wartezeit-Berechnung findest du hier:
http://www.purebasic.fr/german/viewtopic.php?t=17400

Bei der Verwendung von ElapsedMilliseconds oder Delay musst du beachten,
dass die Genauigkeit systembedingt auf ganze Timeslices beschränkt ist, also um die 10-16ms.
wenn du genaueres brauchst, kannst du über API gehen (TimeGetTime, TimeBeginPeriod, etc)


noch ein Wort zu .i
Integer hat immer Registergröße, wird also 32bit oder 64bit haben, je nachdem ob das Programm mit x86 oder x64 compiliert wird.
die Typen Long .l und Quad .q hingegen haben auf beiden systemen ihre festen 32bit bzw. 64bit.
.i ist der Standardtyp, also ohne typangabe wird eine Variable oder eine Procedure immer Integer sein.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
NathanielBlack
Beiträge: 63
Registriert: 25.12.2009 18:48

Re: Blitz Basic Funktionen in BP

Beitrag von NathanielBlack »

Back to Topic:

Wie stellle ich fest ob ein Button gedrückt wurde?

Code: Alles auswählen

 InitSprite()
 event = WindowEvent()
 
 
  If OpenWindow(0, 0, 0, 800, 600, "lands to conquer(alpha)",#PB_Window_ScreenCentered | #PB_Window_SystemMenu ) And OpenWindow(1,0,0,800,600,"lands to conquer(alpha)")
  SetWindowColor(0,RGB(0,0,0))


If CreateGadgetList(WindowID(0)) 

 Starten = ButtonGadget(0, 10, 15, 230, 30, "Starten")



Else
  MessageRequester("Error!","ButtonGadget konnte nicht geladen werden.")
EndIf






Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow


EndIf
Einen Button hab ich ja schon. Aber was muss hinzu kommen um zu gucken, ob er gedrückt wurde und was dann passiert? Die Hilfe Datei hat mir net weitergeholfen.

mfg und danke im vorraus,
NathanielBlack
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Blitz Basic Funktionen in BP

Beitrag von ts-soft »

Code: Alles auswählen

If OpenWindow(0, 0, 0, 800, 600, "lands to conquer(alpha)", #PB_Window_ScreenCentered | #PB_Window_SystemMenu ) And OpenWindow(1, 0, 0, 800, 600, "lands to conquer(alpha)")
  SetWindowColor(0, RGB(0, 0, 0))
  If CreateGadgetList(WindowID(0))
    ButtonGadget(0, 10, 15, 230, 30, "Starten")
  Else
    MessageRequester("Error!", "ButtonGadget konnte nicht geladen werden.")
  EndIf

  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Break
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 0 ; der startenbutton
            MessageRequester("starten", "was zur Hölle soll ich starten?", #MB_ICONQUESTION)
        EndSelect
    EndSelect
  ForEver
EndIf
Wird langsam Zeit, das Du die Hilfe zu verstehen lernst. Eigentlich ist das ganz einfach und logisch aufgebaut :wink:
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Blitz Basic Funktionen in PB

Beitrag von Kaeru Gaman »

@Nathaniel

Welche PureBasic-Version hast du?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten