News ein/ausblenden
Einführung ein/ausblenden

Einführung

Yet Another JavaScript Framework
Bei jBB handelt es sich um ein Framework welches einen vereinfachten Zugriff auf das Canvas-Element von HTML5 anbietet. Das API ist an die beliebte Programmiersprache Blitzbasic angelehnt.

Beispiel

$(document).ready(function()
{
	Graphics("myCoolGame", Game, 60);
	
	ClsColor(90, 128, 200);
	SetColor(255, 0, 0);
});
					
Bevor man jBB Funktionen nutzen kann muss man sicher stellen dass das DOM fertig geladen wurde. Noch sicherer ist es wenn man prüft ob das DOM mitsamt Inhalten geladen wurde, weswegen ich in diesem Beispiel jQuery verwende um das sicher zu stellen. Selbstverständlich kann man die Initialisierungsfunktion auch mit <body onLoad="initGame();"> aufrufen, dann muss man aber zur Laufzeit mit ImageLoaded() sicher stellen dass das Bild geladen wurde und mit DrawImage() gezeichnet werden kann.
Graphics() initialisiert das Framework. Es erwartet als Parameter die ID des Canvas, die Hauptfunktion des Spiels und die Bilder pro Sekunde mit denen das Spiel laufen soll. Danach wird noch die Löschfarbe und die aktuelle Zeichenfarbe festgelegt.
Damit dies alles geschehen kann muss irgendwo im HTML Body der Seite folgendes stehen:
<canvas id="myCoolGame" width="800" height="600">

Dein Browser ist ja mal sowas von letztes Jahrhundert, 
aber sowas von ....

</canvas>
					
Außerdem natürlich auch die Hauptfunktion die wir bei Graphics() angemeldet haben:
function Game()
{
	Cls();
	
	// Hier kommt die Action rein
	
	Flip();
}
					
Bitte beachte dass der Browser nur "versucht" diese Funktion mit den bei Graphics() angegebenen Bildern pro Sekunde anzusteuern. Man kann natürlich nicht erwarten dass ein 100€ Smartphone dies schafft.

Zum Abschluss der Einführung nun noch den kompletten Quelltext des Beispiels:

<!DOCTYPE html>
<html>
<head>
<title>jBB Sample</title>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jBB.js"></script>

<script type="text/javascript">
	$(document).ready(function()
	{
		Graphics("myCoolGame", Game, 60);
		
		ClsColor(90, 128, 200);
		SetColor(255, 0, 0);
	});
	
	function Game()
	{
		Cls();
		
		// Hier kommt die Action rein
		
		Flip();
	}
</script>
</head>
<body>
<canvas id="myCoolGame" width="800" height="600">

Dein Browser ist ja mal sowas von letztes Jahrhundert, 
aber sowas von ....

</canvas>
</body>
</html>
					

Top

Alpha(color)

Beschreibung
Gibt den Alpha-Anteil von color zurück.

Parameter

colorFarbobjekt dessen Alpha-Anteil ermittelt werden soll

Rückgabewert:
Alpha-Anteil von color

Top

Backbuffer()

Beschreibung
Gibt ein Handle auf die Grafikdaten des Canvas zurück. Dieses wird benötigt wenn man mittels WritePixel() und ReadPixel() direkt auf die Pixel des Canvas zugreifen möchte.

Parameter
Keine

Rückgabewert:
Ein Handle auf das Canvas welches dann den Funktionen ReadPixel() und WritePixel() übergeben werden kann.

Top

Blue(color)

Beschreibung
Gibt den Blau-Anteil von color zurück.

Parameter

colorFarbobjekt dessen Blau-Anteil ermittelt werden soll

Rückgabewert:
Blau-Anteil von color

Top

BobRange(bob, rangeName, firstFrame, lastFrame, frameSpeed)

Beschreibung
Erstellt eine neue Animationssequenz für den zuvor erzeugten Bob mit dem Namen rangeName.

Parameter

bobDer mit CreateBob() erzeugte Bob.
rangeNameein Name für die Animationssequenz. Bspw. "Walk"
firstFrameNummer des ersten Bildes der Animation
lastFrameNummer des letzten Bildes der Animation
frameSpeedGeschwindigkeit der Animationssequenz in Bildern pro Sekunde

Rückgabewert:
Keiner

Beispiel:

var anim;
var mainBob;

function init(){
	[...]
	// Bild laden
	anim = LoadAnimImage("images/anim.png", 32, 32, 100);

	// Basis-Bob
	mainBob = CreateBob(anim, 0, 99);

	// Animationssequenz mit dem Namen "walk" definieren
	BobRange(mainBob, "walk", 0, 16, 30);
	
	// Animationssequenz aktivieren
	SetBobRange(mainBob, "walk");
	
	// Animation starten
	StartBob(mainBob);
	[...]
	
	
}

function main(){
	// automatisch animierten Bob zeichnen
	DrawBob(mainBob, MouseX(), MouseY());
}
					

Top

BobSpeed(bob, speed)

Beschreibung
Ändert die Animationsgeschwindigkeit des Bobs

Parameter

bobDer mit CreateBob() erzeugte Bob.
speedWartezeit zwischen zwei Frames der Animation in Millisekunden

Rückgabewert:
Keiner

Top

ClearList(list)

Beschreibung
Löscht eine Liste.

Parameter

listListe die gelöscht werden soll

Rückgabewert:
Keiner

Top

ClearMap(map)

Beschreibung
Löscht eine Map.

Parameter

mapMap die gelöscht werden soll

Rückgabewert:
Keiner

Top

Cls()

Beschreibung
Löscht das Canvas mit der, zuvor mittels ClsColor() definierten, aktuellen Löschfarbe.

Parameter
Keine

Rückgabewert:
Keiner

Top

ClsColor(r, g, b)

Beschreibung
Definiert die Farbe mit der die Funktion Cls() das Canvas löschen soll.

Parameter

rRotanteil der Farbe
gGrünanteil der Farbe
bBlauanteil der Farbe

Rückgabewert:
Keiner

Top

CreateBob(image, firstFrame, lastFrame, speed, looped)

Beschreibung
Diese Funktion erzeugt aus einem zuvor, per LoadAnimImage(), geladenen Image ein automatisch animiertes Bildobjekt. Es wird mit der Geschwindigkeit animiert die speed in Millisekunden angibt.

Parameter

imageein per LoadAnimImage() geladenes Bild
firstFrameStartframe der Animation
lastFrameEndframe der Animation
speedZeit in Millisekunden zwischen zwei Frames
loopedTrue wenn die Animation im Loop abgespielt werden soll

Rückgabewert:
Ein Handle auf den neuen Bob

Top

CreateImage(width, height)

Beschreibung
Erstellt ein neues Image-Objekt welches mit WritePixel() beschrieben werden kann.

Parameter

widthBreite in Pixeln
heightHöhe in Pixeln

Rückgabewert:
Ein Handle auf das neu erstellte Image-Objekt

Anmerkung:
Ein Image-Objekt ist etwas anderes als ein Image welches per LoadImage() geladen wurde. Es können ausschliesslich Image-Objekte mit ReadPixel() und WritePixel() bearbeitet werden.

Top

CreateList()

Beschreibung
Erzeugt eine neue Liste und gibt ein Handle darauf zurück

Parameter
Keiner

Rückgabewert:
Ein Handle auf die neu erzeugte Liste

Beispiel:

// Liste erstellen
var list = CreateList()

// ein paar Daten hinein schreiben
for(var i = 10; i <= 30; i+=10){
	ListAddLast(list, "Eintrag " + i)
}

// Liste iterieren
var eintrag;
while(eintrag = NextItem(list)){
	alert(eintrag);
}
					

Top

CreateMap()

Beschreibung
Erzeugt ein neues assoziatives Array und gibt ein Handle darauf zurück

Parameter
Keiner

Rückgabewert:
Ein Handle auf die neu erzeugte Map

Beispiel:

function main(){
	var map = CreateMap();
	MapInsert(map, "Key 01", 1);
	MapInsert(map, "Key 02", 2);
	MapInsert(map, "Key 03", 3);
	
	ResetMap(map);
	
	var v;
	while(v = MapNextItem(map)){
		alert(v);
	}
	
	alert(MapGetValue(map, "Key 02"));
}
					

Top

DeleteBobRange(bob, rangeName)

Beschreibung
Löscht die Animationssequenz rangeName.

Parameter

bobDer Bob aus dem eine Animationssequenz entfernt werden soll.
rangeNameDer Name der zu löschenden Animationssequenz

Rückgabewert:
Keiner

Top

DebugLog(logtext)

Beschreibung
Gibt logtext in die JavaScript-Konsole aus

Parameter

logtextText der in die Konsole geschrieben werden soll

Rückgabewert:
Keiner

Top

Desktop()

Beschreibung
Gibt ein Objekt vom Typ "tDesk" zurück. Dieses wird für die Funktionen DesktopWidth() und DesktopHeight() benötigt.

Parameter
Keine

Rückgabewert:
Ein Desktop-Objekt.

Top

DesktopHeight()

Beschreibung
Gibt die Höhe des Anzeigebereiches des Browsers zurück.

Parameter
Keine

Rückgabewert:
Höhe des Anzeigebereiches des Browsers in Pixeln.

Top

DesktopWidth()

Beschreibung
Gibt die Breite des Anzeigebereiches des Browsers zurück.

Parameter
Keine

Rückgabewert:
Breite des Anzeigebereiches des Browsers in Pixeln.

Top

DrawBob(bob, x, y)

Beschreibung
Zeichnet einen Bob, der zuvor mittels CreateBob() erzeugt wurde, an die Position x, y.

Parameter

bobDer zu zeichnende Bob
xX-Position an der der Bob ins Canvas gemalt werden soll
yY-Position an der der Bob ins Canvas gemalt werden soll

Rückgabewert:
Keiner

Top

DrawImage(image, x, y, frame)

Beschreibung
Zeichnet ein Image, welches zuvor per LoadImage() geladen wurde in das Canvas.

Parameter

imageDas Handle auf das zu zeichnende Image
xX-Position an der das Bild ins Canvas gemalt werden soll
yY-Position an der das Bild ins Canvas gemalt werden soll
frame Wurde das Bild mit LoadAnimImage() geladen, definiert dieser Parameter die Nummer des Tiles das man malen möchte.

Rückgabewert:
Keiner

Anmerkung:
Mit DrawImage() können keine Image-Objekte gezeichnet werden die mittels CreateImage() erstellt wurden.

Top

DrawLine(x1, y1, x2, y2)

Beschreibung
Zeichnet eine Linie von der Position x1, y1 zur Position x2, y2. Die Linie wird in der Farbe gezeichnet die zuvor mittels SetColor() definiert wurde.

Parameter

x1, y1Startkoordinate der Linie
x2, y2Zielkoordinate der Linie

Rückgabewert:
Keiner

Top

DrawRect(x, y, width, height, radius, solid)

Beschreibung
Zeichnet ein Rechteck an die Position x, y mit der Größe width, height. Ist der Parameter "solid" gleich "True" wird das Rechteck ausgefüllt gezeichnet. Die Farbe des Rechtecks entspricht der die zuvor mittels SetColor() definiert wurde.
"radius" gibt an obm und wenn ja, wie stark die Ecken des Rechtecks gerundet werden sollen.

Parameter

x, yKoordinate der linken, oberen Ecke des Rechtecks
width, heightBreite und Höhe des Rechtecks
radiusRadius der Ecken wenn diese abgerundet werden sollen
solidIst "solid" = True wird das Rechteck ausgefüllt gezeichnet

Rückgabewert:
Keiner

Anmerkung:
Derzeit können Rechtecke mit gerundeten Ecken weder mittels SetScale() skaliert oder mit SetRotation() gedreht werden! Dies wird in einer späteren Version implementiert.

Top

DrawOval(x, y, width, height, filled)

Beschreibung
Zeichnet ein Oval an die Position x, y mit der Größe width, height. Ist der Parameter "filled" gleich "True" wird das Oval ausgefüllt gezeichnet. Die Farbe des Ovals entspricht der die zuvor mittels SetColor() definiert wurde.

Parameter

x, yKoordinate der linken, oberen Ecke des Ovals
width, heightBreite und Höhe des Ovals
filledIst "filled" = True wird das Oval ausgefüllt gezeichnet

Rückgabewert:
Keiner

Top

DrawText(text, x, y)

Beschreibung
Schreibt den String text in der aktuellen Zeichenfarbe an die Position x, y

Parameter

textDer String der ins Canvas gezeichnet werden soll
x, yDie Koordinate an der der Text gezeichnet werden soll

Rückgabewert:
Keiner

Top

Flip()

Beschreibung
Flip() ist zurzeit eine leere Funktion. Das heißt dass sie im Moment gar nichts tut.

Parameter
Keine

Rückgabewert:
Keiner

Top

Cos(value)

Beschreibung
Gibt den Cosinus von value zurück.

Parameter

valueder Wert zu dem Cosinus zurück gegeben werden soll.

Rückgabewert:
Cosinus von value

Top

Sin(value)

Beschreibung
Gibt den Sinus von value zurück.

Parameter

valueder Wert zu dem Sinus zurück gegeben werden soll.

Rückgabewert:
Sinus von value

Top

ACos(value)

Beschreibung
Liefert den Arcuscosinus von value in der Einheit Bogenmaß (Radiant) zurück. Achten Sie darauf, dass Sie sinnvolle Werte zwischen -1 und +1 übergeben.

Parameter

valueder Wert zu dem der Arcuscosinus zurück gegeben werden soll.

Rückgabewert:
Arcuscosinus von value

Top

ASin(value)

Beschreibung
Liefert den Arcussinus von value in der Einheit Bogenmaß (Radiant) zurück. Achten Sie darauf, dass Sie sinnvolle Werte zwischen -1 und +1 übergeben.

Parameter

valueder Wert zu dem der Arcussinus zurück gegeben werden soll.

Rückgabewert:
Arcussinus von value

Top

Abs(value)

Beschreibung
Liefert in jedem Fall den positiven Wert der Zahl zurück. War dieser vorher negativ, wird er positiv.

Parameter

valueumzuwandelnder Wert

Rückgabewert:
positiver Wert von value

Top

Tan(value)

Beschreibung
Gibt den Tangens von value zurück

Parameter

valueWert zu dem der Tangens ermittelt werden soll

Rückgabewert:
Tangens von value

Top

ATan(value)

Beschreibung
Liefert den Arcustangens von value in der Einheit Bogenmaß (Radiant) zurück.

Parameter

valueWert zu dem der Arcustangens ermittelt werden soll

Rückgabewert:
Arcustangens von value

Top

Ceil(value)

Beschreibung
Liefert die nächsthöhere Ganzzahl von value zurück. Wenn die übergebene Zahl eine Ganzzahl ist, bleibt sie unverändert.

Parameter

valueaufzurundender Wert

Rückgabewert:
nächsthöherer Wert von value

Top

Sqr(value)

Beschreibung
Liefert die Quadratwurzel von value zurück.

Parameter

valueWert zu dem die Quadratwurzel ermittelt werden soll

Rückgabewert:
Quadratwurzel von value

Top

Exp(value)

Beschreibung
Liefert den Exponentialwert von value auf Basis der Eulerschen Konstanten zurück.

Parameter

valueWert zu dem der Exponentialwert ermittelt werden soll

Rückgabewert:
Exponentialwert von value

Top

Log(value)

Beschreibung
Liefert die Anwendung des natürlichen Logarithmus auf value zurück. Achte darauf, dass Du sinnvolle Werte übergibst, die größer als 0 sind.

Parameter

valueWert auf den der natürliche Logarithmus angewendet werden soll.

Rückgabewert:
Anwendung des natürlichen Logarithmus auf value

Top

Floor(value)

Beschreibung
Liefert die nächste ganze Zahl, die kleiner oder gleich value ist.

Parameter
Keine

Rückgabewert:

valuezu rundender Wert

Top

FlushBuffer(buffer)

Beschreibung
Beendet alle WritePixel() Aktionen und schreibt das Ergebnis in den Buffer buffer.

Parameter

bufferBuffer der für die Aktion benutzt werden soll

Rückgabewert:
Keiner

Top

GetScaleX()

Beschreibung
Gibt die aktuelle globale X-Skalierung zurück.

Parameter
Keine

Rückgabewert:
Größe der X Skalierung

Top

GetScaleY()

Beschreibung
Gibt die aktuelle globale Y-Skalierung zurück.

Parameter
Keine

Rückgabewert:
Größe der Y Skalierung

Top

Graphics(canvasID, mainLoop, fps)

Beschreibung
Graphics() initialisiert die Engine.

Parameter

canvasIDDie ID mit der das Canvas deklariert wurde 
mainLoopDer Name der HauptfunktionDefault = main
fpsdie Bilder pro Sekunde mit der der Browser versuchen soll die Hauptfunktion anzufahrenDefault = 30

Rückgabewert:
Keiner

Anmerkung:
Im HTML Dokument muss ein Canvas erstellt werden. Dieses erhält eine ID (bspw. id="myCoolGame") welche der Funktion als erster Parameter übergeben werden muss. Der Parameter FPS ist ein "Sollwert", es ist nicht garantiert dass das Endgerät in der Lage ist diese Forderung zu erfüllen. Der Parameter garantiert aber dass das Spiel auf besseren Systemen keinesfalls schneller laufen wird.
Jedes jBB Programm benötigt eine Hauptfunktion in welcher sich der MainLoop befindet. Der Name der Hauptfunktion wird als letzter Parameter übergeben.

Top

GraphicsHeight()

Beschreibung
Gibt die Höhe des Canvas in Pixel zurück.

Parameter
Keine

Rückgabewert:
Höhe des Canvas in Pixel

Top

GraphicsWidth()

Beschreibung
Gibt die Breite des Canvas in Pixel zurück.

Parameter
Keine

Rückgabewert:
Breite des Canvas in Pixel

Top

Green(color)

Beschreibung
Gibt den Grün-Anteil von color zurück.

Parameter

colorFarbobjekt dessen Grün-Anteil ermittelt werden soll

Rückgabewert:
Grün-Anteilvon color

Top

HidePointer()

Beschreibung
Versteckt den Mauszeiger im Canvas

Parameter
Keine

Rückgabewert:
Keiner

Top

ImageHeight(image)

Beschreibung
Gibt die Höhe des Bildes in Pixel zurück

Parameter

imageDas Bild dessen Höhe ermittelt werden soll

Rückgabewert:
Höhe des Bildes

Top

ImageLoaded(image)

Beschreibung
Gibt True zurück wenn das Bild image in das DOM geladen wurde, ansonsten False.

Parameter

imageDas Bild für das ermittelt werden soll ob es fertig geladen wurde.

Rückgabewert:
True wenn das Bild geladen wurde, ansonsten False.

Top

ImageRectOverlap(image, x, y, rectX, rectY, rectWidth, rectHeight)

Beschreibung
Prüft ob das Bild image mit einem Rechteck kollidiert. Dabei definieren rectX und rectY die linke obere Ecke des Rechtecks und rectWidth und rectHeight die Größe des Rechtecks.
Die Funktion gibt true zurück wenn das Bild mit dem Rechteck kollidiert, ansonsten false.

Parameter

imageDas Bild das auf Kollision getestet werden soll
x, yDie Koordinate an der das Bild gerade gezeichnet wird
rectX, rectYdie linke, obere Ecke des Rechtecks
rectWidth, rectHeightdie Größe des Rechtecks

Rückgabewert:
True wenn das Bild mit dem Rechteck kollidiert, ansonsten False.

Top

RectsOverlap(rect1x, rect1y, rect1width, rect1height, rect2x, rect2y, rect2width, rect2height)

Beschreibung
Prüft ob zwei Rechtecke miteinander kollidieren.

Parameter

rect1x, rect1ylinke, obere Ecke des ersten Rechtecks
rect1width, rect1heightGröße des ersten Rechtecks
rect2x, rect2ylinke, obere Ecke des zweiten Rechtecks
rect2width, rect2heightGröße des zweiten Rechtecks

Rückgabewert:
True wenn die beiden Rechtecke kollidieren, ansonsten False.

Top

ImageWidth(image)

Beschreibung
Gibt die Breite des Bildes in Pixel zurück

Parameter

imageDas Bild dessen Breite ermittelt werden soll

Rückgabewert:
Breite des Bildes

Top

Include(source)

Beschreibung
Inkludiert eine JavaScript Datei in das aktuelle Programm

Parameter

sourceName des JavaScript Programms das eingebunden werden soll

Rückgabewert:
Keiner

Top

Dim2D(cols, rows)

Beschreibung
Erzeugt ein zweidimensionales Array

Parameter

colsAnzahl der Spalten im Array
rowsAnzahl der Zeilen im Array

Rückgabewert:
zweidimensionales Array

Beispiel:

var myArray = Dim2D(10, 10);

for(var x = 0; x < 10; x++){
	for(var y = 0; y < 10; y++){
		myArray[x][y] = Rand(0, 9);
	}
}
					

Top

KeyDown(key)

Beschreibung
Gibt zurück ob die Taste key gedrückt ist.

Parameter

keyDer Keycode der geprüft werden soll

Rückgabewert:
True wenn die Taste key gerade gedrückt wird, ansonsten False.

Top

KeyHit(key)

Beschreibung
Gibt zurück ob die Taste key losgelassen wurde.

Parameter

keyDer Keycode der geprüft werden soll

Rückgabewert:
True wenn die Taste key losgelassen wurde, ansonsten False.

Top

ListAddFirst(list, val)

Beschreibung
Hängt den Wert val an den Anfang der Liste List

Parameter

listdie mit CreateList() erzeugte Liste
valDer Wert der an den Anfang der Liste gehangen werden soll

Rückgabewert:
Keiner

Beispiel:

// Liste erstellen
var list = CreateList()

// ein paar Daten hinein schreiben
for(var i = 10; i <= 30; i+=10){
	ListAddFirst(list, "Eintrag " + i)
}

// Liste iterieren
var eintrag;
while(eintrag = NextItem(list)){
	alert(eintrag);
}
					

Top

ListAddLast(list, val)

Beschreibung
Hängt den Wert val an das Ende der Liste List

Parameter

listdie mit CreateList() erzeugte Liste
valDer Wert der an das Ende der Liste gehangen werden soll

Rückgabewert:
Keiner

Beispiel:

// Liste erstellen
var list = CreateList()

// ein paar Daten hinein schreiben
for(var i = 10; i <= 30; i+=10){
	ListAddLast(list, "Eintrag " + i)
}

// Liste iterieren
var eintrag;
while(eintrag = NextItem(list)){
	alert(eintrag);
}
					

Top

ListFlip(list)

Beschreibung
Invertiert die Reihenfolge der Liste

Parameter

listDie Liste die invertiert werden soll

Rückgabewert:
Keiner

Beispiel:

// Liste erstellen
var list = CreateList()

// ein paar Daten hinein schreiben
for(var i = 10; i <= 30; i+=10){
	ListAddLast(list, "Eintrag " + i)
}

ListFlip(list);

// Liste iterieren
var eintrag;
while(eintrag = NextItem(list)){
	alert(eintrag);
}
					

Top

LoadAnimImage(imageFile, cellWidth, cellHeight, maxFrame)

Beschreibung
Lädt ein Bild, teilt es in Tiles und gibt ein Handle darauf zurück

Parameter

imageFilePfad und Dateiname des zu ladenden Bildes
cellWidthBreite der Tiles in Pixel
cellHeightHöhe der Tiles in Pixel
maxFrameAnzahl der Tiles im Image

Rückgabewert:
Handle auf das geladene Image

Anmerkung:
LoadAnimImage() lädt nur Bilder die im Web üblich sind: JPEG, PNG und (statisches) GIF. Man sollte Bilder vor der Initialisierung durch Graphics() laden um sicher zu gehen dass das Bild auch tatsächlich mit dem Beginn des Spiels verfügbar ist.
Die Zählung der Frames beginnt bei 0 und endet bei maxFrame - 1.

Top

LoadFont(family, source, isBold, isItalic)

Beschreibung
Lädt eine Schriftdatei die dann mit SetFont() genutzt werden kann.

Parameter

familyDer Name des Font
sourcePfad zur Schriftdatei
isBoldTrue wenn der Font fett gezeichnet werden soll
isItalicTrue wenn der Font schräggestellt gezeichnet werden soll.

Rückgabewert:
Keiner

Anmerkung:
Safari stürzt hier noch spektakulär ab. An einem Fix wird gearbeitet.

Top

LoadImage(imageFile)

Beschreibung
Lädt ein Bild und gibt ein Handle darauf zurück

Parameter

imageFilePfad und Dateiname des zu ladenden Bildes

Rückgabewert:
Handle auf das geladene Image

Anmerkung:
LoadImage() lädt nur Bilder die im Web üblich sind: JPEG, PNG und (statisches) GIF. Man sollte Bilder vor der Initialisierung durch Graphics() laden um sicher zu gehen dass das Bild auch tatsächlich mit dem Beginn des Spiels verfügbar ist.

Top

CanPlayMP3()

Beschreibung
Prüft ob der Browser des Benutzers MP3 Dateien abspielen kann

Parameter
Keine

Rückgabewert:
True wenn MP3s abgespielt werden können, ansonsten False.

Anmerkung:
Die "Original-Methode" des Audio-Elements liefert entweder nichts (Format kann nicht abgespielt werden) oder ein "maybe" oder ein "probably". Es ist somit nicht 100% sicher dass der Browser das Format spielen kann wenn ein True geliefert wird.

Top

CanPlayOGG()

Beschreibung
Prüft ob der Browser des Benutzers Vorbis OGG Dateien abspielen kann

Parameter
Keine

Rückgabewert:
True wenn OGGs abgespielt werden können, ansonsten False.

Anmerkung:
Die "Original-Methode" des Audio-Elements liefert entweder nichts (Format kann nicht abgespielt werden) oder ein "maybe" oder ein "probably". Es ist somit nicht 100% sicher dass der Browser das Format spielen kann wenn ein True geliefert wird.

Top

LoadSound(soundFile, loop)

Beschreibung
Lädt eine Sound-Datei und gibt ein Handle darauf zurück

Parameter

soundFilePfad und Dateiname des zu ladenden Sounds
loopTrue wenn der Sound in einer Schleife gespielt werden soll, ansonsten False

Rückgabewert:
Handle auf den geladenen Sound

Anmerkung:
LoadSound() kann nur Sound-Dateien laden die der Ziel-Browser unterstützt. jBB bietet hier die Funktionen CanPlayMP3() und CanPlayOGG() an um herauszufinden ob die Sound-Datei gespielt werden kann

Man kann entweder direkt beim Laden der Datei angeben ob diese in einer Schleife (Loop) gespielt werden soll, oder aber man definiert dies später mit der Funktion SoundLoop().

Top

MapGetValue(map, key)

Beschreibung
Gibt den Wert für den Schlüssel key zurück

Parameter

mapdas Handle der Map aus der ein Wert gelesen werden soll
keyDer Name des Schlüssels dessen Wert geholt werden soll

Rückgabewert:
Wert des Schlüssels key

Beispiel:

function main(){
	var map = CreateMap();
	MapInsert(map, "Key 01", 1);
	MapInsert(map, "Key 02", 2);
	MapInsert(map, "Key 03", 3);
	
	ResetMap(map);
	
	var v;
	while(v = MapNextItem(map)){
		alert(v);
	}
	
	alert(MapGetValue(map, "Key 02"));
}
					

Top

MapInsert(map, key, value)

Beschreibung
Fügt einem zuvor mit CreateMap() erzeugtem assoziativem Array einen neuen Wert hinzu.

Parameter

mapdas Handle der Map der ein Wert hinzugefügt werden soll
keyDer Name des Wertes mit dem der Wert assoziiert werden soll
valueder Wert dieses Eintrags

Rückgabewert:
Keiner

Beispiel:

function main(){
	var map = CreateMap();
	MapInsert(map, "Key 01", 1);
	MapInsert(map, "Key 02", 2);
	MapInsert(map, "Key 03", 3);
	
	ResetMap(map);
	
	var v;
	while(v = MapNextItem(map)){
		alert(v);
	}
	
	alert(MapGetValue(map, "Key 02"));
}
					

Top

MapNextItem(map)

Beschreibung
Gibt den nächsten Schlüssel in der Map zurück. Diese Funktion wird dazu verwendet um durch eine Map zu iterieren.

Parameter

mapdas Handle der Map aus der der nächste Wert geholt werden soll

Rückgabewert:
Wert des nächsten Schlüssels

Beispiel:

function main(){
	var map = CreateMap();
	MapInsert(map, "Key 01", 1);
	MapInsert(map, "Key 02", 2);
	MapInsert(map, "Key 03", 3);
	
	ResetMap(map);
	
	var v;
	while(v = MapNextItem(map)){
		alert(v);
	}
}
					

Top

MapRemoveItem(map, key)

Beschreibung
Entfernt einen Schlüssel mit seinem Wert aus einer Map.

Parameter

mapdas Handle der Map aus der ein Schlüssel gelöscht werden soll
keyDer Name des Schlüssels

Rückgabewert:
Keiner

Beispiel:

function main(){
	var map = CreateMap();
	MapInsert(map, "Key 01", 1);
	MapInsert(map, "Key 02", 2);
	MapInsert(map, "Key 03", 3);
	
	ResetMap(map);
	
	var v;
	while(v = MapNextItem(map)){
		alert(v);
	}
	
	alert(MapGetValue(map, "Key 02"));
	MapRemoveItem(map, "Key 01");
}
					

Top

ResetMap(map)

Beschreibung
Setzt eine Map zum erneuten iterieren zurück

Parameter

mapdas Handle der Map die zurück gesetzt werden soll

Rückgabewert:
Keiner

Beispiel:

function main(){
	var map = CreateMap();
	MapInsert(map, "Key 01", 1);
	MapInsert(map, "Key 02", 2);
	MapInsert(map, "Key 03", 3);
	
	ResetMap(map);
	
	var v;
	while(v = MapNextItem(map)){
		alert(v);
	}
}
					

Top

MilliSecs()

Beschreibung
Gibt die Millisekunden zurück die seit dem Systemstart vergangen sind

Parameter
Keine

Rückgabewert:
Millisekunden seit dem Systemstart

Top

MouseDown(key)

Beschreibung
Ermittelt ob die Maustaste key gerade gedrückt wird.

Parameter

key
  • MOUSE_LEFT
  • MOUSE_MIDDLE
  • MOUSE_RIGHT

Rückgabewert:
True wenn die Maustaste key gerade gedrückt wird, ansonsten False.

Top

MouseHit(key)

Beschreibung
Ermittelt ob die Maustaste key losgelassen wurde.

Parameter

key
  • MOUSE_LEFT
  • MOUSE_MIDDLE
  • MOUSE_RIGHT

Rückgabewert:
True wenn die Maustaste key losgelassen wurde, ansonsten False.

Top

MouseX()

Beschreibung
Gibt die X-Koordinate des Mauszeigers zurück

Parameter
Keine

Rückgabewert:
X-Koordinate des Mauszeigers (relativ zur linken, oberen Ecke des Canvas)

Top

MouseY()

Beschreibung
Gibt die Y-Koordinate des Mauszeigers zurück

Parameter
Keine

Rückgabewert:
Y-Koordinate des Mauszeigers (relativ zur linken, oberen Ecke des Canvas)

Top

MouseWheel()

Beschreibung
Gibt den Status des Mausrades zurück

Parameter
Keine

Rückgabewert:
Wird das Mausrad nach vorn bewegt wird 1 zurückgegeben, wird es nach hinten bewegt wird -1 zurück gegeben, ansonsten 0.

Top

NextItem(list)

Beschreibung
Diese Funktion gibt das nächste Element in der Liste zurück.

Parameter

listDie Liste dessen nächstes Element ermittelt werden soll.

Rückgabewert:
nächster Eintrag der Liste

Beispiel:

// Liste erstellen
var list = CreateList()

// ein paar Daten hinein schreiben
for(var i = 10; i <= 30; i+=10){
	ListAddLast(list, "Eintrag " + i)
}

// Liste iterieren
var eintrag;
while(eintrag = NextItem(list)){
	alert(eintrag);
}
					

Top

Notify(msg)

Beschreibung
Öffnet ein Requester mit dem Text msg.

Parameter

msgText der im Requester angezeigt werden soll

Rückgabewert:
Keiner

Top

OnImageLoaded(img, func)

Beschreibung
Führt die Funktion func aus sobald das Bild img fertig geladen wurde.

Parameter

imgDas Bild dessen Ladezustand überwacht werden soll.
funcFunktion die ausgeführt werden soll wenn das Bild komplett geladen wurde.

Rückgabewert:
Keiner

Top

AutoMidHandle(value)

Beschreibung
Wird der Funktion True übergeben, werden alle nachfolgenden Zeichenoperation zentriert im Bild ausgeführt.

Parameter

valueTrue wenn alle Bilder zentriert gezeichnet werden sollen, ansonsten False

Rückgabewert:
Keiner

Top

MidHandle(image, value)

Beschreibung
Gibt an ob das Bild image zentriert an den Zeichenkoordinaten gezeichnet werden soll

Parameter

imageBild für das definiert werden soll ob es zentriert gezeichnet werden soll
valueTrue wenn das Bild zentriert gezeichnet werden soll, ansonsten False

Rückgabewert:
Keiner

Top

PauseSound(sound)

Beschreibung
Pausiert das Abspielen des Sounds "sound"

Parameter

soundHandle des Sounds der pausiert werden soll

Rückgabewert:
Keiner

Top

PlaySound(sound)

Beschreibung
Spielt den Sound ab der zuvor mit LoadSound() geladen wurde

Parameter

soundHandle des zuvor geladenen Sounds

Rückgabewert:
Keiner

Top

Rand(min, max)

Beschreibung
Gibt einen zufälligen Wert zurück der zwischen min und max liegt.

Parameter

minKleinster Zufallswert
maxGrößter Zufallswert

Rückgabewert:
Ein zufälliger Wert zwischen min und max

Top

ReadPixel(buffer, x, y)

Beschreibung
Gibt die Farbe des Pixels an Position x, y im Buffer buffer zurück.

Parameter

bufferBuffer der gelesen werden soll
x, yPosition an der gelesen werden soll

Rückgabewert:
Ein Objekt vom Typ tColor

Anmerkung:
Diese Funktion gibt ein Objekt vom Typ tColor zurück. Um an die Farbwerte zu kommen können entweder die Funktionen Red(), Green(), Blue() und Alpha() aufgerufen werden, oder man verwendet direkt die Methoden des Rückgabewerts: color.red(), color.green(), color.blue(), color.alpha().

Beispiel:

var color = ReadPixel(Backbuffer(), 10, 10);
Notify(color.red() + "," + color.green() + "," + color.blue() + "," + color.alpha());
					

Top

Red(color)

Beschreibung
Gibt den Rot-Anteil der Farbe color zurück.

Parameter

colorFarbobjekt dessen Rot-Anteil ermittelt werden soll

Rückgabewert:
Rot-Anteil von color

Top

RemoveFromList(list, val)

Beschreibung
Entfernt den Wert val aus der Liste list

Parameter

listdie mit Handle der Liste aus der der Wert entfernt werden soll
valWert der aus der Liste entfernt werden soll

Rückgabewert:
Keiner

Beispiel:

// Liste erstellen
var list = CreateList()

// ein paar Daten hinein schreiben
for(var i = 10; i <= 30; i+=10){
	ListAddLast(list, "Eintrag " + i)
}

RemoveFromList(list, "Eintrag 20");

// Liste iterieren
var eintrag;
while(eintrag = NextItem(list)){
	alert(eintrag);
}
					

Top

ResetBob(bob)

Beschreibung
Setzt die Animationssequenz auf die gesamte Länge des AnimImages.

Parameter

bobBob der zurück gesetzt werden soll.

Rückgabewert:
Keiner

Top

ResetList(list)

Beschreibung
Setzt den Iterator der Liste zurück. Dies ist notwendig um die Liste komplett iterieren zu können. Wurde die Liste noch nicht, oder zuletzt komplett, iteriert kann ResetList() weggelassen werden.

Parameter

listHandle der Liste die zurück gesetzt werden soll

Rückgabewert:
Keiner

Beispiel:

// Liste erstellen
var list = CreateList()

// ein paar Daten hinein schreiben
for(var i = 10; i <= 30; i+=10){
	ListAddLast(list, "Eintrag " + i)
}

ResetList(list);

// Liste iterieren
var eintrag;
while(eintrag = NextItem(list)){
	alert(eintrag);
}
					

Top

ResizeCanvas(canvasID, width, height)

Beschreibung
Skaliert das Canvas. So kann die Größe des Canvas vor dem Aufruf von Graphics() oder Graphics3D() verändert werden.

Parameter

canvasIDID des Canvas dessen Größe geändert werden soll
widthNeue Breite des Canvas
heightNeue Höhe des Canvas

Rückgabewert:
Keiner

Anmerkung:
In Verbindung mit den Funktionen Desktop(), DesktopWidth() und DesktopHeight() kann mit dieser Funktion das Canvas bspw. in den Vollbildmodus geschaltet werden.

var desk = Desktop();
ResizeCanvas("game", DesktopWidth(desk), DesktopHeight(desk));

Top

CenterCanvas()

Beschreibung
zentriert das Canvas im Browser-Fenster

Parameter
Keine

Rückgabewert:
Keiner

Anmerkung:
Diese Funktion setzt die Position des Canvas auf "absolute" und zentriert es dann im Browser. Beachte dass damit ein umstehendes Design "zerstört" werden kann. Um dies zu verhindern muss im Canvas-Style "z-index" auf einen Wert > 1 gesetzt werden!

/* Canvas Style */
#myCanvas{
	z-index : 10;
}
					

Top

SetBobange(bob, rangeName)

Beschreibung
Ändert die aktuelle Animationssequenz des Bob.

Parameter

bobDer Bob für den die aktuelle Animationssequenz geändert werden soll.
rangeNameName der Animationssequenz

Rückgabewert:
Keiner

Top

SetColor(r, g, b, a)

Beschreibung
Setzt die aktuelle Zeichenfarbe

Parameter

r, g, bRot-, Grün-, und Blauanteil der Farbe
alphaTransparenz der Farbe (0 - 255)

Rückgabewert:
Keiner

Anmerkung:
SetColor() definiert die aktuelle Farbe für alle nachfolgenden Zeichenoperationen. Die Werte sind immer in einem Bereich von 0 - 255 anzugeben.

Top

SetShadow(offX, offY, blur)

Beschreibung
Definiert wie ein Schatten für nachfolgende Elemente gezeichnet werden soll

Parameter

offX, offYVersatz des Schattens in X und Y Richtung
blurGibt an um wieviele Pixel der Schatten weichgezeichnet werden soll

Rückgabewert:
Keiner

Anmerkung:
SetColor() definiert die Farbe des Schattens. Beachte: Schatten sind sehr teuer für die Performance. Selbst auf schnellen Gamer-Maschinen wird die Performance bis zu 70% reduziert!

Top

SetAlpha(alpha)

Beschreibung
Definiert mit welcher Transparenz die nachfolgenden Zeichenoperationen durchgeführt werden sollen.

Parameter

alphaein Wert zwischen 0.0 und 1.0

Rückgabewert:
Keiner

Top

SetDrawMode(drawmode)

Beschreibung
Definiert mit welcher "Composite-Operation" die nachfolgenden Zeichenoperationen durchgeführt werden sollen.

Parameter

drawmodegewünschter Modus (siehe Grafik)

Rückgabewert:
Keiner

Anmerkung:
drawmode kann einer der folgenden Werte sein:

  • source-over (Default)
  • source-in
  • source-out
  • source-atop
  • destination-over
  • destination-in
  • destination-out
  • destination-atop
  • lighter
  • copy
  • xor

Top

SetFont(fontName, height, isBold, isItalic)

Beschreibung
Legt fest mit welchem Font die nachfolgenden DrawText() Anweisungen zeichnen sollen.

Parameter

fontNameDer Name des Fonts (Achtung! CSS-Style)
heightDie Höhe des Fonts (Metrics müssen angegeben werden (px, pt, em etc.))
isBoldTrue = Der Font wird fett gezeichnet
isItalicTrue = Der Font wird schräggestellt gezeichnet

Rückgabewert:
Keiner

Anmerkung:
fontName muss im "CSS-Style" angegeben werden.

Beispiel:

// Lade den Font "Arial" (Alternative Verdana)
// mit einer Höhe von 30 Pixel. Der Font
// soll fett und kursiv gezeichnet werden.
SetFont("Arial, Verdana, sans-serif", "30px", True, True);
					

Top

SetScale(x, y)

Beschreibung
Definiert die Skalierung für nachfolgende Zeichenbefehle

Parameter

xSkalierung in der Breite
ySkalierung in der Höhe

Rückgabewert:
Keiner

Anmerkung:
Derzeit funktioniert SetScale() nur mit DrawImage(). Die Parameter x, y sind relativ anzugeben: 0, 0 skaliert das Bild auf 0, 0. 1, 1 behält die original Skalierung des Bildes bei. 2, 2 verdoppelt die Größe des Bildes etc.

Top

SetRotation(winkel)

Beschreibung
Definiert die Rotation für nachfolgende Zeichenbefehle

Parameter

winkelWinkel der Skalierung (zwischen 0.0 und 360.0 Grad)

Rückgabewert:
Keiner

Anmerkung:
Derzeit (Version 0.7) erwarten betroffene Funktionen den Parameter als Bogenmaß oder liefern einen Winkel im Bogenmaß. SetRotation() arbeitet aber mit Winkeln. In Zukunft werden alle Funktionen auf "Degree" (Winkel) umgestellt. Ich werde dies im Changelog und in der Dokumentation entsprechend erläutern.

Top

SetSoundPosition(sound, position)

Beschreibung
Definiert ab welcher Sekunde der Sound abgespielt werden soll

Parameter

soundSound dessen Startposition bestimmt werden soll
positionSekunde an der der Sound abgespielt werden soll

Rückgabewert:
Keiner

Top

ShowPointer

Beschreibung
zeigt den mit HidePointer() versteckten Mauszeiger wieder an.

Parameter
Keine

Rückgabewert:
Keiner

Top

SoundLength(sound)

Beschreibung
Gibt die Länge des Sounds in Sekunden zurück

Parameter

soundHandle des Sounds dessen Länge ermittelt werden soll

Rückgabewert:
Länge des Sounds in Sekunden

Top

SoundVolume(sound, volume)

Beschreibung
Definiert die Lautstärke des Sounds

Parameter

soundHandle des Sounds dessen Lautstärke geändert werden soll
volumeEin Wert zwischen 0.0 und 1.0 der die Lautstärke definiert

Rückgabewert:
Keiner

Top

StartBob(bob)

Beschreibung
Startet die Bob-Animation

Parameter

bobDer Bob dessen Animation gestartet werden soll

Rückgabewert:
Keiner

Top

StopBob(bob)

Beschreibung
Stoppt die Bob-Animation

Parameter

bobDer Bob dessen Animation gestoppt werden soll

Rückgabewert:
Keiner

Top

StopSound(sound)

Beschreibung
Stoppt das Abspielen des Sounds "sound" und setzt den Sound auf Anfang

Parameter

soundHandle des Sounds der gestoppt werden soll

Rückgabewert:
Keiner

Top

GetSoundPosition(sound)

Beschreibung
Liefert die Sekunde und die Millisekunde an der der Sound gerade abgespielt wird.

Parameter

soundHandle des Sounds dessen aktuelle Spielzeit ermittelt werden soll

Rückgabewert:
Fließkommawert: Sekunde.Millisekunde (bspw. 3.500)

Top

SoundLoop(sound, value)

Beschreibung
Definiert ob der Sound wiederholt abgespielt werden soll oder nicht.

Parameter

soundHandle des Sounds
valueTrue wenn der Sound wiederholt werden soll, ansonsten False

Rückgabewert:
Keiner

Top

GetLoopCount(sound)

Beschreibung
Gibt die Anzahl der Wiederholungen zurück die der Sound bereits gespielt wurde

Parameter

soundHandle des Sounds

Rückgabewert:
Anzahl der Wiederholungen

Top

StringWidth(text)

Beschreibung
Ermittelt die Breite von text in Pixeln.

Parameter

textDer String dessen Breite ermittelt werden soll

Rückgabewert:
Keiner

Top

Left(inString, chars)

Beschreibung
Gibt den linken Teil der Zeichenkette inString zurück. Die Länge der Zeichenketten die zurück gegeben werden soll wird mit chars definiert.

Parameter

inStringZeichenkette von der der linke Teil ermittelt werden soll
charsAnzahl der Zeichen die ermittelt werden sollen

Rückgabewert:
Zeichenkette mit der Länge chars

Top

Mid(inString, startPos, chars)

Beschreibung
Gibt einen Teil der Zeichenkette inString zurück. Die Länge der Zeichenketten die zurück gegeben werden soll wird mit chars definiert, startPos gibt an an welcher Stelle die Teilzeichenkette beginnen soll.

Parameter

inStringZeichenkette aus der ein Teil ermittelt werden soll
startPosStartposition ab der die Teilzeichenkette ermittelt werden soll
charsAnzahl der Zeichen die ermittelt werden sollen

Rückgabewert:
Zeichenkette mit der Länge chars

Top

Right(inString, chars)

Beschreibung
Gibt den rechten Teil der Zeichenkette inString zurück. Die Länge der Zeichenketten die zurück gegeben werden soll wird mit chars definiert.

Parameter

inStringZeichenkette von der der rechte Teil ermittelt werden soll
charsAnzahl der Zeichen die ermittelt werden sollen

Rückgabewert:
Zeichenkette mit der Länge chars

Top

InStr(inString, toFind)

Beschreibung
Ermittelt ob sich die Zeichenkette toFind in inString befindet.

Parameter

inStringZeichenkette in der ein Zeichen oder ein String gesucht werden soll
toFindZeichenkette oder Zeichen nach dem gesucht werden soll

Rückgabewert:
Position von toFind (Zählung beginnt bei 0). Konnte keine Position ermittelt werden gibt die Funktion -1 zurück.

Top

Replace(inString, toFind, replaceWith)

Beschreibung
Ersetzt die Zeichenkette toFind durch replaceWith.

Parameter

inStringZeichenkette in der ein Zeichen oder ein String ersetzt werden soll
toFindzu ersetzender Teil der Zeichenkette
replaceWithZeichen oder eichenkette die stattdessen eingefügt werden soll

Rückgabewert:
Neue Zeichenkette

Top

Lower(inString)

Beschreibung
Wandelt alle Zeichen von inString in Kleinbuchstaben um.

Parameter

inStringZeichenkette deren Zeichen umgewandelt werden sollen

Rückgabewert:
Zeichenkette aus Kleinbuchstaben

Top

Upper(inString)

Beschreibung
Wandelt alle Zeichen von inString in Grossbuchstaben um.

Parameter

inStringZeichenkette deren Zeichen umgewandelt werden sollen

Rückgabewert:
Zeichenkette aus Grossbuchstaben

Top

Trim(inString)

Beschreibung
Entfernt Leerzeichen am Anfang und am Ende der Zeichenkette.

Parameter

inStringZeichenkette die "getrimmt" werden soll

Rückgabewert:
Zeichenkette ohne Leerzeichen am Anfang und am Ende

Top

WritePixel(buffer, x, y)

Beschreibung
Zeichnet einen Pixel in der aktuellen Farbe an die Position x, y in den Buffer buffer.

Parameter

bufferBuffer der für die Aktion benutzt werden soll
x, yKoordinate im Buffer an der die Aktion stattfinden soll

Rückgabewert:
Keiner

Anmerkung:
WritePixel() ist sehr Resourcen-intensiv. Man sollte sich genau überlegen ob man einen Pixel per Frame zeichnen will oder ob es genügt dies vor dem Mainloop zu erledigen oder aber dies nur in bestimmten Situationen zu tun. Sind alle Pixel gezeichnet ist der Aufruf der Funktion WritePixelReady() erforderlich um die Änderungen anzuzeigen.

Top

WaitForRes(value)

Beschreibung
Definiert ob die Funktionen LoadSound und LoadImage solange warten sollen bis die Resource vollständig geladen wurde.

Parameter

valueTrue wenn gewartet werden soll, ansonsten False

Rückgabewert:
Keiner

Anmerkung:
Diese Funktion soll eigentlich nur die Kompatiblität zu Blitzbasic erhöhen. Es ist ratsam selbst eine Routine zu schreiben die nicht blockiert wenn sie eine Resource auf Vollständigkeit prüft.

Top

jBB HTML Template

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
	<title>jBB Template</title>
	<meta http-equiv="content-type" content="text/html;charset=utf-8" />
	
	<!-- change the path to the location of jbb.js -->
	<script type="text/javascript" src="../js/jbb-min.js"></script>
	
	<script type="text/javascript">
		/*
			global variables
			var myImage;
		*/
		
		function jBBInit(){
			Graphics("jBBGame", jBBMain, 60);
			ClsColor(0, 0, 0);
			
			/* 
				resources
				myImage = LoadImage(...);
			*/
			
		}
		
		function jBBMain(){
			Cls();
			
			// here comes the action ...
			
		}
	</script>
</head>

<body onLoad="jBBInit();">
	<canvas id="jBBGame" width="800" height="600">
		This text is displayed if your browser does not support HTML5 Canvas.
	</canvas>
</body>
</html>
				

Top

Shoutbox

Name:

Shout: