Ray 低阶 API 参考

Low Level API (Engine.*) 是为多样化的 2D 游戏制作而设计的。

每个 API 函式都只接受一个引数。 该引数必须是字典,而引数必须以键值对方式存放。

骨架

// 请勿在函式外定义变数,这会造成语法错误。

// 视窗建立时呼叫。
func setup() {
    // 回传视窗设定。
    return {
        width: 1280,
        height: 720,
        title: "My First Game"
    };
}

// 游戏开始时只呼叫一次。
func start() {
    // 全域变数应该在这里定义。
    posX = 0;
    posY = 0;

    // 建立一张白色的 100x100 纹理。
    tex = Engine.createColorTexture({
        width: 100,
        height: 100,
        r: 255, g: 255, b: 255, a: 255
    });
}

// 每一帧在渲染前呼叫。
func update() {
    posX = Engine.mousePosX;
    posY = Engine.mousePosY;
}

// 每一帧用来绘制图形。
func render() {
    Engine.draw({ texture: tex, x: posX, y: posY });
}

除错

print()

这个 API 会列印字串或转储物件。 只接受非字典引数。

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

时间

绝对时间

变数说明
Engine.millisec毫秒时间。
func update() {
    // 取得距离上次呼叫经过的秒数。
    var curTime = Engine.millisec;
    var dt = (curTime - lastTime) * 0.001;
    lastTime = curTime;

    updateCharacters(dt);
}

Engine.getDate()

回传日期字典。

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;
}

输入

以下是变数,不是函式。

变数说明
Engine.mousePosX滑鼠 X 座标。
Engine.mousePosY滑鼠 Y 座标。
Engine.isMouseLeftPressed滑鼠左键状态。
Engine.isMouseRightPressed滑鼠右键状态。
Engine.isEscapeKeyPressedEsc 键状态。
Engine.isReturnKeyPressedEnter 键状态。
Engine.isSpaceKeyPressed空白键状态。
Engine.isTabKeyPressedTab 键状态。
Engine.isBackspaceKeyPressedBackspace 键状态。
Engine.isDeleteKeyPressedDelete 键状态。
Engine.isHomeKeyPressedHome 键状态。
Engine.isEndKeyPressedEnd 键状态。
Engine.isPageupKeyPressedPageUp 键状态。
Engine.isPagedownKeyPressedPageDown 键状态。
Engine.isShiftKeyPressedShift 键状态。
Engine.isControlKeyPressedCtrl 键状态。
Engine.isAltKeyPressedAlt 键状态。
Engine.isUpKeyPressed上方向键状态。
Engine.isDownKeyPressed下方向键状态。
Engine.isRightKeyPressed右方向键状态。
Engine.isLeftKeyPressed左方向键状态。
Engine.isAKeyPressedA 键状态。
Engine.isBKeyPressedB 键状态。
Engine.isCKeyPressedC 键状态。
Engine.isDKeyPressedD 键状态。
Engine.isEKeyPressedE 键状态。
Engine.isFKeyPressedF 键状态。
Engine.isGKeyPressedG 键状态。
Engine.isHKeyPressedH 键状态。
Engine.isIKeyPressedI 键状态。
Engine.isJKeyPressedJ 键状态。
Engine.isKKeyPressedK 键状态。
Engine.isLKeyPressedL 键状态。
Engine.isMKeyPressedM 键状态。
Engine.isNKeyPressedN 键状态。
Engine.isOKeyPressedO 键状态。
Engine.isPKeyPressedP 键状态。
Engine.isQKeyPressedQ 键状态。
Engine.isRKeyPressedR 键状态。
Engine.isSKeyPressedS 键状态。
Engine.isTKeyPressedT 键状态。
Engine.isUKeyPressedU 键状态。
Engine.isVKeyPressedV 键状态。
Engine.isWKeyPressedW 键状态。
Engine.isXKeyPressedX 键状态。
Engine.isYKeyPressedY 键状态。
Engine.isZKeyPressedZ 键状态。
Engine.is1KeyPressed1 键状态。
Engine.is2KeyPressed2 键状态。
Engine.is3KeyPressed3 键状态。
Engine.is4KeyPressed4 键状态。
Engine.is5KeyPressed5 键状态。
Engine.is6KeyPressed6 键状态。
Engine.is7KeyPressed7 键状态。
Engine.is8KeyPressed8 键状态。
Engine.is9KeyPressed9 键状态。
Engine.is0KeyPressed� 键状态。
Engine.isF1KeyPressedF1 键状态。
Engine.isF2KeyPressedF2 键状态。
Engine.isF3KeyPressedF3 键状态。
Engine.isF4KeyPressedF4 键状态。
Engine.isF5KeyPressedF5 键状态。
Engine.isF6KeyPressedF6 键状态。
Engine.isF7KeyPressedF7 键状态。
Engine.isF8KeyPressedF8 键状态。
Engine.isF9KeyPressedF9 键状态。
Engine.isF10KeyPressedF10 键状态。
Engine.isF11KeyPressedF11 键状态。
Engine.isF12KeyPressedF12 键状态。
Engine.isGamepadUpPressed手把上方向键状态。
Engine.isGamepadDownPressed手把下方向键状态。
Engine.isGamepadLeftPressed手把左方向键状态。
Engine.isGamepadRightPressed手把右方向键状态。
Engine.isGamepadAPressed手把 A 按钮状态。
Engine.isGamepadBPressed手把 B 按钮状态。
Engine.isGamepadXPressed手把 X 按钮状态。
Engine.isGamepadYPressed手把 Y 按钮状态。
Engine.isGamepadLPressed手把 L 按钮状态。
Engine.isGamepadRPressed手把 R 按钮状态。
Engine.gamepadAnalogX1手把类比 1 X 轴(-32768, 32767)
Engine.gamepadAnalogY1手把类比 1 Y 轴(-32768, 32767)
Engine.gamepadAnalogX2手把类比 2 X 轴(-32768, 32767)
Engine.gamepadAnalogY2手把类比 2 Y 轴(-32768, 32767)
Engine.gamepadAnalogL手把类比 L(-32768, 32767)
Engine.gamepadAnalogR手把类比 R(-32768, 32767)

func update() { if (Engine.isMouseLeftPressed) { player.x = player.x + 100; } }

Rendering

Engine.createColorTexture()

此 API 会以指定颜色建立一个材质贴图并回传。

Argument NameDescription
width贴图宽度。
height贴图高度。
r红色。
g绿色。
b蓝色。
aAlpha 值。

func createBlockTexture() { blockTex = Engine.createColorTexture({ width: 16, height: 16, r: 255, g: 255, b: 255, a: 255 }); }

Engine.loadTexture()

此 API 会从资产载入贴图并回传。

Argument NameDescription
file要载入的档案名称。

` func loadPlayerTexture() { playerTex = Engine.loadTexture({ file: "player.png" });

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

Engine.destroyTexture()

此 API 会销毁贴图。

Argument NameDescription
texture贴图。

func destroyPlayerTexture() { Engine.loadTexture({ texture: playerTex }); }

Engine.renderTexture()

此 API 会将贴图渲染到画面上。

Argument NameDescription
dstLeft萤幕座标 X。
dstTop萤幕座标 Y。
dstWidth萤幕上的宽度。
dstHeight萤幕上的高度。
texture贴图。
srcLeft贴图左上角 X。
srcTop贴图左上角 Y。
srcWidth贴图矩形宽度。
srcHeight贴图矩形高度。
alphaAlpha 值(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()

此 API 会将贴图渲染到画面上(比 Engine.renderTexture() 更简单的版本)。

Argument NameDescription
texture贴图。
x萤幕座标 X。
y萤幕座标 Y。

func renderPlayer() { Engine.draw({ texture: playerTex, x: playerPos.x, y: playerPos.y }); }

Engine.renderTexture3D()

此 API 会将贴图渲染到画面上。

Argument NameDescription
x1萤幕座标 X1。
y1萤幕座标 Y1。
x2萤幕座标 X2。
y2萤幕座标 Y2。
x3萤幕座标 X3。
y3萤幕座标 Y3。
x4萤幕座标 X4。
y4萤幕座标 Y4。
texture贴图。
srcLeft贴图左上角 X。
srcTop贴图左上角 Y。
srcWidth贴图矩形宽度。
srcHeight贴图矩形高度。
alphaAlpha 值(0-255)。

func renderPlayer3D() { Engine.renderTexture3D({ x1: playerPos.x, y1: playerPos.y, x2: playerPos.x + playerTex.width, y2: playerPos.y, x3: playerPos.x + playerTex.width, y3: playerPos.y + playerTex.height, x4: playerPos.x, y4: playerPos.y + playerTex.height, texture: playerTex, srcLeft: 0, srcTop: 0, srcWidth: playerTex.width, srcHeight: playerTex.height, alpha: 255 }); }

Engine.loadFont()

此 API 会将资产字型档载入到指定字型槽。

Argument NameDescription
slot字型槽索引。(0-3)
file要载入的档案名称。

func loadNotoSansFont() { Engine.loadFont({ slot: 0, file: "NotoSans.ttf" }); }

Engine.createTextTexture()

此 API 会建立贴图并在其上绘制文字。

Argument NameDescription
slot字型槽索引。(0-3)
text要绘制的文字。
size字型大小。
r红色。
g绿色。
b蓝色。
aAlpha 值。

func createScoreTexture() { scoreTex = Engine.createTextTexture({ slot: 0, text: "Score: " + score, size: 32, r: 255, g: 255, b: 255, a: 255 }); }

Sound

Engine.playSound()

此 API 会开始播放指定音效资产档。

Argument NameDescription
stream音轨索引。(0-3)
file要播放的档案。

func playJumpSound() { Engine.playSound({ stream: 0, file: "jump.ogg" }); }

Engine.playSoundLoop()

此 API 会开始播放指定音效资产档。

Argument NameDescription
stream音轨索引。(0-3)
file要播放的档案。

func playBGM() { Engine.playSoundLoop({ stream: 0, file: "jump.ogg" }); }

Engine.stopSound()

此 API 会停止指定音轨上的音效播放。

Argument NameDescription
stream音轨索引。(0-3)

func playJumpSound() { Engine.stopSound({ stream: 0 }); }

Engine.setSoundVolume()

此 API 会设定指定音轨的音量。

Argument NameDescription
stream音轨索引。(0-3,-1 代表主音量)
volume音量值。(0-1.0)

func playJumpSound() { Engine.setSoundVolume({ stream: 0, volume: 1.0 }); }

Save Data

Engine.writeSaveData()

此 API 会写入与 key 字串对应的存档资料值。 如果存档资料值太大,这个 API 会失败。

Argument NameDescription
key键值字串。
value值。(整数、浮点数、阵列或字典)

Engine.readSaveData()

此 API 会读取与 key 字串对应的存档资料值。 回传值会是一个代表存档资料值的物件。 当指定的 key 不可用时,此 API 会失败。

Argument NameDescription
key键值字串。

Engine.checkSaveData()

此 API 会检查指定 key 字串是否存在存档资料。 回传值为布林值。

Argument NameDescription
key键值字串。