API de bajo nivel de rayos

El Low Level API (Engine.*) está diseñado para la creación versátil de juegos 2D.

Cada función API toma un parámetro. El parámetro debe ser un diccionario y los argumentos deben almacenarse como pares clave-valor.

esqueleto

// Do not define variables outside functions because it's a syntax error.

// Called when the window is created.
func setup() {
    // Return the window configuration.
    return {
        width: 1280,
        height: 720,
        title: "My First Game"
    };
}

// Called once when the game starts.
func start() {
    // Global variables should be defined here.
    posX = 0;
    posY = 0;

    // Create a white 100x100 texture.
    tex = Engine.createColorTexture({
        width: 100,
        height: 100,
        r: 255, g: 255, b: 255, a: 255
    });
}

// Called every frame before rendering.
func update() {
    posX = Engine.mousePosX;
    posY = Engine.mousePosY;
}

// Called every frame to render graphics.
func render() {
    Engine.draw({ texture: tex, x: posX, y: posY });
}

Depurar

print()

Esta API imprime una cadena o vuelca un objeto. Sólo se necesita un argumento que no esté en el diccionario.

func dumpEnemies() {
    if (Engine.isGamepadXPressed) {
        print("[Current emenies]");
        print(enemies);
    }
}

Tiempo

Tiempo absoluto

VariableDescription
Engine.millisecTiempo en milisegundos.
func update() {
    // Get the seconds since the last call.
    var curTime = Engine.millisec;
    var dt = (curTime - lastTime) * 0.001;
    lastTime = curTime;

    updateCharacters(dt);
}

Engine.getDate()

Devuelve un diccionario de fechas.

func frame() {
    var date = Engine.getDate({});

    var year  = date.year;
    var month = date.month;
    var day   = date.day;
    var hour  = date.hour;
    var min   = date.minute;
    var sec   = date.second;
}

Aporte

Estas son variables, no funciones.

VariableDescription
Engine.mousePosXPosición del ratón X.
Engine.mousePosYPosición del ratón Y.
Engine.isMouseLeftPressedEstado del botón izquierdo del ratón.
Engine.isMouseRightPressedEstado del botón derecho del ratón.
Engine.isEscapeKeyPressedEstado de la clave de escape.
Engine.isReturnKeyPressedRegresar estado de clave.
Engine.isSpaceKeyPressedEstado de la clave de espacio.
Engine.isTabKeyPressedEstado de la tecla Tab.
Engine.isBackspaceKeyPressedEstado de la tecla de retroceso.
Engine.isDeleteKeyPressedEliminar estado de clave.
Engine.isHomeKeyPressedEstado de la clave de inicio.
Engine.isEndKeyPressedFin del estado de la clave.
Engine.isPageupKeyPressedEstado de la clave Re Pág.
Engine.isPagedownKeyPressedEstado de la clave PageDown.
Engine.isShiftKeyPressedEstado de la tecla Shift.
Engine.isControlKeyPressedEstado de la clave de control.
Engine.isAltKeyPressedEstado de la tecla Alt.
Engine.isUpKeyPressedEstado de la tecla de flecha hacia arriba.
Engine.isDownKeyPressedEstado de la tecla de flecha hacia abajo.
Engine.isRightKeyPressedEstado de la tecla de flecha derecha.
Engine.isLeftKeyPressedEstado de la tecla de flecha izquierda.
Engine.isAKeyPressedEstado de clave 'A'.
Engine.isBKeyPressedEstado de clave 'B'.
Engine.isCKeyPressedEstado de clave 'C'.
Engine.isDKeyPressedEstado de clave 'D'.
Engine.isEKeyPressedEstado de clave 'E'.
Engine.isFKeyPressedEstado de clave 'F'.
Engine.isGKeyPressedEstado de clave 'G'.
Engine.isHKeyPressedEstado de clave 'H'.
Engine.isIKeyPressedEstado clave 'I'.
Engine.isJKeyPressedEstado de clave 'J'.
Engine.isKKeyPressedEstado de clave 'K'.
Engine.isLKeyPressedEstado de clave 'L'.
Engine.isMKeyPressedEstado de clave 'M'.
Engine.isNKeyPressedEstado de clave 'N'.
Engine.isOKeyPressedEstado de clave 'O'.
Engine.isPKeyPressedEstado de la clave 'P'.
Engine.isQKeyPressedEstado de la clave 'Q'.
Engine.isRKeyPressedEstado de la clave 'R'.
Engine.isSKeyPressedEstado de clave 'S'.
Engine.isTKeyPressedEstado de clave 'T'.
Engine.isUKeyPressedEstado de clave 'U'.
Engine.isVKeyPressedEstado de clave 'V'.
Engine.isWKeyPressedEstado de clave 'W'.
Engine.isXKeyPressedEstado de clave 'X'.
Engine.isYKeyPressedEstado de clave 'Y'.
Engine.isZKeyPressedEstado de clave 'Z'.
Engine.is1KeyPressedEstado clave '1'.
Engine.is2KeyPressedEstado clave '2'.
Engine.is3KeyPressedEstado clave '3'.
Engine.is4KeyPressedEstado clave '4'.
Engine.is5KeyPressedEstado clave '5'.
Engine.is6KeyPressedEstado clave '6'.
Engine.is7KeyPressedEstado clave '7'.
Engine.is8KeyPressedEstado de clave '8'.
Engine.is9KeyPressedEstado clave '9'.
Engine.is0KeyPressedEstado de clave '0'.
Engine.isF1KeyPressedEstado de la tecla F1.
Engine.isF2KeyPressedEstado de la tecla F2.
Engine.isF3KeyPressedEstado de la tecla F3.
Engine.isF4KeyPressedEstado de la tecla F4.
Engine.isF5KeyPressedEstado de la clave F5.
Engine.isF6KeyPressedEstado de la clave F6.
Engine.isF7KeyPressedEstado de la tecla F7.
Engine.isF8KeyPressedEstado de la tecla F8.
Engine.isF9KeyPressedEstado de la clave F9.
Engine.isF10KeyPressedEstado de la tecla F10.
Engine.isF11KeyPressedEstado de la clave F11.
Engine.isF12KeyPressedEstado de la clave F12.
Engine.isGamepadUpPressedEstado de flecha hacia arriba del gamepad.
Engine.isGamepadDownPressedEstado de flecha hacia abajo del gamepad.
Engine.isGamepadLeftPressedEstado de la flecha izquierda del gamepad.
Engine.isGamepadRightPressedEstado de la flecha derecha del gamepad.
Engine.isGamepadAPressedGamepad Estado del botón A.
Engine.isGamepadBPressedEstado del botón B del gamepad.
Engine.isGamepadXPressedEstado del botón X del gamepad.
Engine.isGamepadYPressedEstado del botón Y del gamepad.
Engine.isGamepadLPressedEstado del botón L del gamepad.
Engine.isGamepadRPressedEstado del botón R del gamepad.
Engine.gamepadAnalogX1Gamepad analógico 1 X (-32768, 32767)
Engine.gamepadAnalogY1Gamepad analógico 1 Y (-32768, 32767)
Engine.gamepadAnalogX2Gamepad analógico 2 X (-32768, 32767)
Engine.gamepadAnalogY2Gamepad analógico 2 Y (-32768, 32767)
Engine.gamepadAnalogLGamepad analógico L (-32768, 32767)
Engine.gamepadAnalogRGamepad analógico R (-32768, 32767)
func update() {
    if (Engine.isMouseLeftPressed) {
        player.x = player.x + 100;
    }
}

Representación

Engine.createColorTexture()

Esta API crea una textura con el color especificado y devuelve una textura.

Nombre del argumentoDescription
widthAncho de textura.
heightAltura de textura.
rColor rojo.
gColor verde.
bColor azul.
aColor alfa.
func createBlockTexture() {
    blockTex = Engine.createColorTexture({
                   width:  16,
                   height: 16,
                   r:      255,
                   g:      255,
                   b:      255,
                   a:      255
               });
}

Engine.loadTexture()

Esta API carga una textura a partir de activos y devuelve una textura.

Nombre del argumentoDescription
fileNombre del archivo a cargar.
func loadPlayerTexture() {
   playerTex = Engine.loadTexture({
                   file: "player.png"
               });

   var width = playerTex.width;
   var height = playerTex.height;
}

Engine.destroyTexture()

Esta API destruye una textura.

Nombre del argumentoDescription
textureTexture.
func destroyPlayerTexture() {
    Engine.loadTexture({
        texture: playerTex
    });
}

Engine.renderTexture()

Esta API representa una textura en la pantalla.

Nombre del argumentoDescription
dstLeftCoordenada de pantalla X.
dstTopCoordenada de pantalla Y.
dstWidthAncho en pantalla.
dstHeightAltura en pantalla.
textureTexture.
srcLeftTextura arriba izquierda X.
srcTopTextura arriba izquierda Y.
srcWidthAncho del rectángulo de textura.
srcHeightAltura del rectángulo de textura.
alphaValor alfa (0-255)
func renderPlayer() {
    Engine.renderTexture({
        dstLeft:   playerPos.x,
        dstTop:    playerPos.y,
        dstWidth:  playerTex.width,
	dstHeight: playerTex.height,
        texture:   playerTex,
        srcLeft:   0,
        srcTop:    0,
        srcWidth:  playerTex.width,
        srcHeight: playerTex.height,
        alpha:     255
    });
}

Engine.draw()

Esta API representa una textura en la pantalla (una versión más simple de Engine.renderTexture()).

Nombre del argumentoDescription
textureTexture.
xCoordenada de pantalla X.
yCoordenada de pantalla Y.
func renderPlayer() {
    Engine.draw({
        texture: playerTex,
        x:       playerPos.x,
        y:       playerPos.y
    });
}

Engine.renderTexture3D()

Esta API representa una textura en la pantalla.

Nombre del argumentoDescription
x1Coordenada de pantalla X1.
y1Coordenada de pantalla Y1.
x2Coordenada de pantalla X2.
y2Coordenada de pantalla Y2.
x3Coordenada de pantalla X3.
y3Coordenada de pantalla Y3.
x4Coordenada de pantalla X4.
y4Coordenada de pantalla Y4.
textureTexture.
srcLeftTextura arriba izquierda X.
srcTopTextura arriba izquierda Y.
srcWidthAncho del rectángulo de textura.
srcHeightAltura del rectángulo de textura.
alphaValor alfa (0-255)
func renderPlayer() {
    Engine.renderTexture({
        dstLeft:   playerPos.x,
        dstTop:    playerPos.y,
        dstWidth:  playerTex.width,
	dstHeight: playerTex.height,
        texture:   playerTex,
        srcLeft:   0,
        srcTop:    0,
        srcWidth:  playerTex.width,
        srcHeight: playerTex.height,
        alpha:     255
    });
}

Engine.loadFont()

Esta API carga un archivo de fuente de recurso en una ranura de fuente especificada.

Nombre del argumentoDescription
slotÍndice de ranura de fuente. (0-3)
fileNombre del archivo a cargar.
func loadNotoSansFont() {
    Engine.loadFont({ slot: 0, file: "NotoSans.ttf" });
}

Engine.createTextTexture()

Esta API crea una textura y dibuja un texto sobre ella.

Nombre del argumentoDescription
slotÍndice de ranura de fuente. (0-3)
textTexto a dibujar.
sizeTamaño de fuente.
rColor rojo.
gColor verde.
bColor azul.
aColor alfa.
func createScoreTexture() {
    scoreTex = Engine.createTextTexture({
                   slot: 0,
                   text: "Score: " + score,
                   size: 32,
                   r:    255,
                   g:    255,
                   b:    255,
                   a:    255
               });
}

Sonido

Engine.playSound()

Esta API comienza a reproducir un archivo de recursos de sonido en una pista de sonido específica.

Nombre del argumentoDescription
streamÍndice de pistas. (0-3)
fileArchivo para reproducir.
func playJumpSound() {
    Engine.playSound({ stream: 0, file: "jump.ogg" });
}

Engine.playSoundLoop()

Esta API comienza a reproducir un archivo de recursos de sonido en una pista de sonido específica.

Nombre del argumentoDescription
streamÍndice de pistas. (0-3)
fileArchivo para reproducir.
func playBGM() {
    Engine.playSoundLoop({ stream: 0, file: "jump.ogg" });
}

Engine.stopSound()

Esta API detiene la reproducción de sonido en una pista de sonido específica.

Nombre del argumentoDescription
streamÍndice de pistas. (0-3)
func playJumpSound() {
    Engine.stopSound({ stream: 0 });
}

Engine.setSoundVolume()

Esta API establece un volumen de sonido en una pista de sonido específica.

Nombre del argumentoDescription
streamÍndice de pistas. (0-3, -1 para maestro)
volumeValor de volumen. (0-1,0)
func playJumpSound() {
    Engine.setSoundVolume({
        stream: 0,
        volume: 1.0
    });
}

Guardar datos

Engine.writeSaveData()

Esta API escribe un valor de datos guardados que corresponde a una cadena de clave. Si el valor de los datos guardados es demasiado grande, esta API fallará.

Nombre del argumentoDescription
keyCadena de claves.
valueValor. (entero, coma flotante, matriz o diccionario)

Engine.readSaveData()

Esta API lee el valor de los datos guardados que corresponde a una cadena de clave. El valor de retorno será un objeto que representa un valor de datos guardados. Esta API fallará cuando la clave especificada no esté disponible.

Nombre del argumentoDescription
keyCadena de claves.

Engine.checkSaveData()

Esta API comprueba si los datos guardados existen para una cadena de clave o no. El valor de retorno es booleano.

Nombre del argumentoDescription
keyCadena de claves.