跳到主要內容

渲染器 API

渲染器(scratch-render)用 WebGL 繪製舞臺。非沙箱擴充功能Scratch.renderer 存取它(等價於 util.runtime.renderer)。

大多數擴充功能從不接觸渲染器;角色會自動繪製。只有當您想在舞臺上繪製自己的圖形時才需要它。模型有兩層:

  • 皮膚持有紋理(點陣圖、SVG、畫筆畫布或文本)。
  • 可繪製物件是引用皮膚的有位置實例。您給可繪製物件一個皮膚,然後設定它的位置、縮放、效果和圖層。
myBlock(args, util) {
const renderer = util.runtime.renderer;

const skinId = renderer.createBitmapSkin(imageData, 1);
const drawableId = renderer.createDrawable('pen'); // 一個圖層組
renderer.updateDrawableSkinId(drawableId, skinId);
renderer.updateDrawableProperties(drawableId, {
position: [0, 0],
scale: [100, 100],
visible: true
});
}

這些是內部 API。它們可能隨 Bilup 版本而更改,因此請保護您的程式碼並清理您建立的皮膚和可繪製物件。

皮膚

方法描述
createBitmapSkin(bitmapData, resolution, rotationCenter?)ImageData、畫布或影像建立皮膚。resolution 通常是 12。返回皮膚 id。
createSVGSkin(svgData, rotationCenter?)從 SVG 字串建立皮膚。返回皮膚 id。
createPenSkin()您用畫筆方法在其上繪製的空皮膚。返回皮膚 id。
createTextSkin(type, text, pointsLeft)對話/思考氣泡皮膚。
updateBitmapSkin(skinId, imgData, resolution, rotationCenter?)替換點陣圖皮膚的內容。
updateSVGSkin(skinId, svgData, rotationCenter?)替換 SVG 皮膚的內容。
destroySkin(skinId)釋放皮膚。用完時執行此操作。
getSkinSize(skinId)皮膚的 [寬度, 高度]
getSkinRotationCenter(skinId)[x, y] 旋轉中心。

可繪製物件

方法描述
createDrawable(group)在圖層組中建立可繪製物件(例如 'pen')。返回可繪製物件 id。
destroyDrawable(drawableId, group)移除可繪製物件。
updateDrawableSkinId(drawableId, skinId)將可繪製物件指向皮膚。
updateDrawableProperties(drawableId, properties)設定 position [x,y]directionscale [sx,sy]visibleghost 和其他效果,以及 skinId
getCurrentSkinSize(drawableId)可繪製物件當前皮膚的 [寬度, 高度]
getBounds(drawableId)舞臺座標中的緊密邊界框。
getDrawableOrder(drawableId)可繪製物件在其組內的索引。
setDrawableOrder(drawableId, order, group, isRelative?, min?)重新排序可繪製物件(更改分層)。

畫筆繪製

只適用於用 createPenSkin() 製作的皮膚。

方法描述
penClear(penSkinId)擦除畫筆層。
penPoint(penSkinId, penAttributes, x, y)繪製一個點。
penLine(penSkinId, penAttributes, x0, y0, x1, y1)繪製一條線。penAttributes{ color4f: [r,g,b,a], diameter }

碰撞

方法描述
isTouchingColor(drawableId, color3b, mask3b?)可繪製物件是否與顏色重疊。color3b[r,g,b](0 到 255)。
isTouchingDrawables(drawableId, candidateIds?)可繪製物件是否與任何給定可繪製物件重疊。

舞臺與輸出

方法描述
draw()立即渲染一幀。
requestSnapshot(callback)捕獲畫布;回呼接收一個資料 URL。
setBackgroundColor(r, g, b, a?)舞臺背景顏色。分量是 0 到 1。
resize(pixelsWide, pixelsTall)設定畫布的物理畫素大小。
setStageSize(xLeft, xRight, yBottom, yTop)設定邏輯舞臺邊界。
renderer.canvas<canvas> 元素。

座標

舞臺座標與 Scratch 匹配:(0, 0) 是中心,x 向右增加,y 向上增加。在預設舞臺上 x 從 -240 到 240,y 從 -180 到 180,但舞臺大小可以自訂,因此請讀取 runtime.stageWidth / runtime.stageHeight,而不是假設。

另請參閱