- Bessere Wiederverwendbarkeit von Code
Verbesserte Codeverwaltung bei größeren Projekten
Neutraler Quellcode, welcher zusätzlich unabhängig von Änderungen im nativen Code ist
Cache Management für schnelle Verarbeitung
Sprachfeatures
- Native Features der Zielsprache
Encapsulation
Polymorphism
Dynamische Objekte
Vererbung
Anonyme Objekte (z.b Lambda Funktionen)
Attribute
Module wie Funktionen, Strukturen, Klassen, Namensräume
Prototypen um "im Kontext von" zu agieren
Vereinheitlichte Deklarationen (z.B immer "map" anstatt "Map" und "NewMap")
Management für Abhängigkeiten
Beispielcode
Code: Alles auswählen
include "libraries/math.spp";
use "libraries/ogre.spp";
/*
Ogre
Simple example using Ogre with classes
*/
InitEngine3D();
InitSprite();
InitKeyboard();
OpenWindow(0, 0, 0, 800, 400, "Ogre", PB_Window_SystemMenu);
OpenWindowedScreen(WindowID(0), 0, 0, 800, 400);
ogre\asset map resource;
resource["cube"].id = CreateCube(-1, 40);
class actor : ogre\model {
abstract void function control() {}
}
class player : actor {
public override void function control() {
if (KeyboardPushed(PB_Key_Left)) {
this.translate(1, 0, 0);
}
if (KeyboardPushed(PB_Key_Right)) {
this.translate(-1, 0, 0);
}
if (KeyboardPushed(PB_Key_Up)) {
this.translate(0, 0, 1);
}
if (KeyboardPushed(PB_Key_Down)) {
this.translate(0, 0, -1);
}
}
}
/* Test scene */
camera = new ogre\camera(100, 100, 100);
camera.translate(100, 100, 100);
camera.lookAt(0, 0, 0);
light = new ogre\light(0, 100, 0, rgb(255, 255, 255));
test = new player(resource["cube"]);
forever {
if (ExamineKeyboard()) {
test.control();
camera.lookTo(test);
}
FlipBuffers();
RenderWorld();
Delay(10);
switch WindowEvent() {
case PB_Event_CloseWindow:
End;
}
}
Kompilieren
Es gibt bereits eine frühe Alpha, allerdings sind hier einige Features noch nicht implementiert, bzw. können Fehler auch zum Absturz führen, da das Feedback System erst noch etwas ausgebaut wird. Aktuell entsteht auch eine kleine IDE auf Basis von node-webkit, daher können momentan erzeugte Projekte nur manuell weiter kompiliert werden. Derzeit empfehle ich Notepad++ und gewählter Sprache C#.
Zuerst in "package.json" die Pfade jeweils zur PureBasic Installation anpassen. Ein Sapphire Skript (*.spp) auf "pyroclast.exe" droppen, wenn es fehlerfrei kompiliert werden konnte wurde das Projekt unter "build" angelegt. Die darin liegende "index.pb" kann in der PureBasic IDE dann weiter kompiliert werden.