 |
 |
 |
|
Artikel > Tipps&More
Wie bereits vorgewarnt werde ich hier gelegentlich Tipps und anderes Zeug zu BB veröffentlichen, die aber eigentlich sowieso jeder schon kennt. Wenn jemand weitere Tipps hat, soll er mir bitte eine Mail an fginarie@hotmail.com senden. Er wird auch hier erwähnt.
Cursorsteuerung in zwei Zeilen
dx = KeyDown(205) - KeyDown(203)
dy = KeyDown(208) - KeyDown(200)
;Cursor Hoch ------ dx = 0 : dy =-1
;Cursor Runter ---- dx = 0 : dy =+1
;Cursor Links ----- dx =-1 : dy = 0
;Cursor Rechts ---- dx =+1 : dy = 0
|
Das ist zwar simpel und die meisten kennen es schon, aber vieleicht hilft's ja jemandem.
Zwischen 1 und 0 hin- und herspringen
Bevor jetzt einer ankommt und sagt: "Ich mach das aber ganz anders!" : Es gibt noch andere Wege. Mit dieser Methode kann man natürlich auch zwischen anderen Zahlen wechseln, wozu man sie aber etwas modifizieren muss.
Lockbuffer verwenden
Lockbuffer BackBuffer()
  WritePixelFast x,y,rgb
UnLockBuffer Backbuffer()
|
Viele verwenden LockBuffer nicht und wundern sich darüber, dass ihre Partikelengine nicht schnell genug ist. Naja, aber manche lassen dann ja auch den Debugger an ;) Ich würde übrigens nicht empfehlen, das ganze unterhalb des Bildschirmbereiches anzuwenden. Bei mir kommen dann immer so schöne Darstellungsfehler.
Bilder zerstören
Hier die Antwort auf die häufig gestellte Frage nach der Methode, mit der ich das Terrain in WkW zerstöre. Man arbeitet einfach mit der MaskColor. Im folgenden Beispiel kann man einen Würfel zerschießen.
Graphics 400,300,16,2
cube = CreateImage(200,200)
SetBuffer ImageBuffer(cube)
  Color 255,0,0
  Rect 0,0,200,200
SetBuffer BackBuffer()
Repeat
  Cls
  DrawImage cube,100,50
  If MouseHit(1)
    SetBuffer ImageBuffer(cube)
      Color 0,0,0
      Oval MouseX()-120,MouseY()-80,40,40
    SetBuffer BackBuffer()
  EndIf
  Flip
Until KeyHit(1)
End
|
Setbuffer Backbufffer() nicht vergessen
Auf manchen PCs wie z.B. meinem läuft ein Programm mit Flip auch ohne "Setbuffer Backbufffer()" ohne Flimmern. So kann es manchmal leicht vorkommen, dass man "Setbuffer Backbufffer()" vergisst. Vergesst es nicht! Das ist zwar nicht der intelligenteste Tipp, aber man kann nicht oft genug daran erinnern. Nachdem Benutzten von Graphics muss man übrigens erneut in den Backbuffer() schalten.
Manchmal Dinge in Bildern speichern
Ich speichere des öfteren Texte etc. in Bildern. Wenn ich beispielsweise einen Text mit einigen tausend Zeichen jedesmal auf seinen Zeilenumbrücke prüfen müsste, wäre das saulangsam. Man kann das ganze natürlich auch in einem Array oder einem Type speichern, was aber manchmal eher umständlich ist. Einen in einem Bild gespeicherten Text kann man mit Bildern und Farben verzieren, ohne dass es später zu Geschwindigkeitsverlusten kommt. Grafikspeicher hat heut zu Tage sowieso fast jeder genug. Man könnte natürlich auch den gesamten Bildschirm speichern und ihn nur bei Mausklicks aktuallisieren, wenn das Programm das ermöglicht.
CLS weglassen
Wenn ihr ohnehin den ganzen Bildschirm jedesmal neuzeichnet, braucht ihr kein CLS.
Der beste Tipp
www.bliztbase.de lesen! Dort steht ein Artikel über Speedoptimierung, in dem leider die meisten Tipps schon gegeben wurden. Außderdem findet ihr eine Befehlsübersicht und einen Haufen Tuts und Artikel.
Farben umkehren
Color 255 - farber, 255 - farbeg, 255 - farbeb
|
Damit kann man Farben umkehren. Die entstehende Farbe entspricht auch fast der Komplementärfarbe.
Variable für MouseHit()
WaitMouse()
Print MouseHit(1) + " erste Abfrage"
Print MouseHit(1) + " zweite Abfrage"
WaitMouse()
mh = MouseHit(1)
Print mh + " erste Abfrage mit mh"
Print mh + " zweite Abfrage mit mh"
WaitKey()
|
Dieser Code demonstriert die Vorteile von einer Variable für Mousehit().
Input durch GetKey ersetzen
SetBuffer BackBuffer()
Repeat
  Cls
  Text 0,0,txt$
  key = GetKey()
  If key >= 32 Then txt$ = txt$ + Chr$(key)
  If KeyHit(14) And Len(txt$)>0 Then txt$ = Left$(txt$,Len(txt$)-1)
  Flip
Until KeyDown(1)
|
Wie man gut erkennen kann, ist das eine sehr simple Sache. Normalerweise verwende ich noch Cursor und ähnliches, aber zur Demonstration einer Eingaberoutine, die nicht das restliche Programm anhält, reicht es.
Screenshotfunktion
SetBuffer BackBuffer()
Repeat
  Cls
  Rect 100,100,100,100
  If KeyHit(68) Then Screenshot("screen")
  Flip
Until KeyDown(1)
End
Function Screenshot(pfad$)
  Local num%
  Repeat
    If FileType(pfad$+num+".bmp")=1 Then
      SaveBuffer BackBuffer(),pfad$+num+".bmp"
      Exit
    EndIf
    num=num+1
  Forever
End Function
|
Ich denke, Titel und Code sind selbsterklärend.
Execfile mit weiterlaufendem Programm
Wenn ein Programm im Vollbildmodus läuft und Execfile benutzt wird, ist es evtl. ratsam, das Programm mit Graphics in den Fenstermodus zu schalten, sodass es nicht minimiert wird und weiterläuft.
|
|
 |
|
 |
|