要開始使用 expo-2d-context,首先需要安裝 npm 包,并通過環(huán)境提供的機制創(chuàng)建 GL 上下文,然后將其傳遞給 Expo2DContext 類的新實例。之后,您可以像在 Web 瀏覽器中一樣使用這些實例。例如:
import React from 'react';
import { GLView } from 'expo';
import Expo2DContext from 'expo-2d-context';
export default class App extends React.Component {
render() {
return (
);
} _onGLContextCreate = (gl) => {
const ctx = new Expo2DContext(gl); ctx.fillStyle = "grey";
ctx.fillRect(20, 40, 100, 100); ctx.beginPath();
ctx.moveTo(70, 40);
ctx.lineTo(70, 30);
ctx.arc(70, 20, 10, 0.5 * Math.PI, 2.5 * Math.PI);
ctx.stroke(); ctx.flush(); // 更新屏幕
};
}
需要注意的是,與普通的 2D 上下文實現(xiàn)不同,此實現(xiàn)假設是在緩沖環(huán)境中繪制的。因此,當您需要實際更新屏幕時,必須調(diào)用上下文的 flush() 方法。
如果您需要使用 API 的字體繪制功能,請首先調(diào)用 ctx.initializeText() 方法以加載必要的資源。之后,您可以按照常規(guī)方式使用字體繪制功能。例如:
await ctx.initializeText();
ctx.fillStyle = "blue";
ctx.font = "italic 72pt sans-serif";
ctx.fillText("Hey Galaxy", 10, 200);
ctx.flush(); // 更新屏幕
expo-2d-context 是一個非常適合以下場景的工具:
此外,它還可以讓應用程序的邏輯和渲染代碼之間的交互更加流暢和高效,避免了基于 WebView 的渲染方法可能遇到的性能瓶頸。
需要注意的是,與瀏覽器的原生 2D 上下文實現(xiàn)相比,expo-2d-context 的性能稍遜一籌。不過,對于用戶界面和簡單的視頻游戲開發(fā)來說,其性能已經(jīng)足夠。如果您需要更高性能的解決方案,可以考慮使用基于 WebView 的原生畫布實現(xiàn)。
除了應用程序開發(fā)之外,expo-2d-context 還可以作為學習 2D Canvas API 的工具。它提供了一個替代實現(xiàn),而這些 API 通常只存在于大型渲染引擎的代碼庫中。
我們使用 W3C 的一致性測試套件來確保庫的功能按預期運行。測試套件的修改版本位于庫的 GitHub 倉庫中的 test 目錄中,可以在瀏覽器和 Expo 環(huán)境中運行。
如果您在使用過程中遇到問題,或者希望為該庫的開發(fā)貢獻力量,請訪問其 GitHub 倉庫提交問題或拉取請求。
原文鏈接: https://blog.expo.dev/introducing-the-canvas-2d-context-api-for-expo-8ba6106ed8e5