成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一起學 Pixijs(二):修改圖形屬性

開發(fā) 前端
今天西瓜哥帶大家來看看在 Pixijs 怎么修改圖形的屬性。因為 Pixijs 的底層維護了圖形樹,所以我們可以直接修改圖形的屬性,讓 Pixijs 重新計算并渲染出新的畫面。

大家好,我是前端西瓜哥。

我們做動畫、游戲、編輯器,需要根據(jù)用戶的交互等操作,去實時地改變圖形的屬性,比如位置,顏色等信息。今天西瓜哥帶大家來看看在 pixijs 怎么修改圖形的屬性。

因為 pixijs 的底層維護了圖形樹,所以我們可以直接修改圖形的屬性,讓 pixijs 重新計算并渲染出新的畫面。

首先我們先繪制一個矩形:

import * as PIXI from 'pixi.js'

const app = new PIXI.Application({ width: 640, height: 360 });
document.body.appendChild(app.view);

const rect = new PIXI.Graphics();
rect.beginFill(0xFF0044); // 設置填充色
rect.lineStyle(5, 0xFFFFFF); // 設置描邊線寬和顏色
rect.drawRect(100, 100, 200, 100); // 參數(shù)分別為 x, y, width, height
// 添加到 stage 下
app.stage.addChild(rect);

可以看到,畫布繪制出了一個矩形。

圖片

需要注意的是,graphics 對象其實是一個容器,雖然只裝了一個矩形,但你可以在它下面繪制更多的內容,比如圓形、線條等等。

所以 graphics 的位置默認是 (0, 0),而不是上面繪制矩形時設置的 (100, 100)。

圖形位移

rect.x = x;
rect.y = y;

順帶一提,上面的 x 和 y 其實用了 getter 和 setter 代理了 rect.position 對象。該對象屬于 PIXI.ObservablePoint 類,有不少好用的方法,比如判斷和另一個點是否相等、求和另一個點的點積等。

所以還可以這樣寫:

rect.position.set(x, y);

我寫了個 demo,給 app.view 加了個點擊事件,點擊后修改 x 和 y,效果如下:

圖片

圖形旋轉

rect.rotation = radian; // 設置弧度

rotation 使用的值是弧度,學術上和很多 API 都是用弧度的,計算上更方便。

當然也可以用角度 angle,但底層也是做了代理:轉換成弧度值,然后賦值給 rotation 屬性。

rect.angle = angle; // 設置角度

然后很重要一點的是旋轉中心的設置。旋轉中心默認是 (0, 0)。可以通過 pivot 屬性來設置。

rect.pivot.set(cx, cy);

pivot 這個屬性比較抽象,它會影響 position 的效果,從表現(xiàn)上,它會將容器下的圖形往 (-cx, -cy) 方向移動,所以你還需要通過 rect.position.set(cx, cy) 將容器移動回原來的位置。

另一種做法是,在繪制矩形的時候,將將其中心點對上 (0, 0),就不用設置 pivot 了。

圖片

圖形縮放

用法類似圖形旋轉。

rect.scale.set(sx, sy)

圖形斜切

rect.skew.set(skewX, skewY);

圖形內容更新

前面這些都是物理位置和變形相關的,只需要在原來繪制出來的像素上做一些線性運算的到新的位置就可以了。

但如果你要做改變圖形的填充色、線寬等操作時,就不能簡單地設置一些屬性就可以了,而是需要先用 clear 方法清空內容,然后重新定義形狀。

rect.clear();
// 然后像第一次繪制一樣,繪制一個矩形出來
// 將其中一些變量設置為新的值就可以了
// ...

下面是修改矩形線寬的例子。其他繪制參數(shù)比如填充色照舊,但線寬設置了新值。

const rect = new PIXI.Graphics();
rect.beginFill(0xFF0044);
rect.lineStyle(5, 0xFFFFFF); // 設置描邊線寬和顏色
rect.drawRect(100, 100, 200, 100);

app.view.onclick = () => {
// rect.skew.set(1.3, 1)
// rect.width = 100;
rect.clear();
rect.beginFill(0xFF0044);
rect.lineStyle({ width: 10, color: 0xFFFFFF });
rect.drawRect(100, 100, 200, 100);
}

效果:

圖片

結尾

只是改變 graphics 的物理信息,或者說是變形(transform),只需要直接修改 position、rotation 屬性即可。但如果是內容的改變,就要用 clear 清空內容,然后重新繪制了。

責任編輯:姜華 來源: 前端西瓜哥
相關推薦

2023-02-22 09:27:31

CanvasWebGL

2023-02-28 07:28:50

Spritepixijs

2023-03-02 07:44:39

pixijsWebGL

2023-04-27 08:27:29

WebGL變形矩陣

2022-12-02 14:20:09

Tetris鴻蒙

2022-11-29 16:35:02

Tetris鴻蒙

2023-03-30 09:32:27

2022-11-14 17:01:34

游戲開發(fā)畫布功能

2024-02-28 12:12:20

Pipeline數(shù)據(jù)機制

2023-11-13 22:27:53

Mapping數(shù)據(jù)庫

2023-04-12 07:46:24

JavaScriptWebGL

2023-11-30 15:23:07

聚合查詢數(shù)據(jù)分析

2023-03-29 07:31:09

WebGL坐標系

2023-11-13 12:48:32

語言DSL

2023-05-04 08:48:42

WebGL復合矩陣

2023-06-26 15:14:19

WebGL紋理對象學習

2023-04-26 07:42:16

WebGL圖元的類型

2023-05-16 07:44:03

紋理映射WebGL

2023-05-31 20:10:03

WebGL繪制立方體

2023-04-13 07:45:15

WebGL片元著色器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日日日干干干 | 一色一黄视频 | 久久久久综合 | 另类一区 | 国产精品久久久久久久久久久久 | 日韩在线不卡视频 | 古典武侠第一页久久777 | 夜夜爽99久久国产综合精品女不卡 | 亚洲福利 | 色综合激情 | 另类a v| 欧美日韩精品久久久免费观看 | 亚洲男人天堂网 | 欧美在线一区二区三区 | 另类二区| 4hu最新网址 | 久久久久9999| 日本在线播放 | 亚洲久久一区 | 亚洲电影专区 | 中文字幕精品一区二区三区精品 | 操视频网站 | 99热这里有精品 | 黄色网址在线播放 | 91久久国产精品 | 亚洲精品第一页 | 日韩欧美在线不卡 | 国内精品久久久久 | av网站免费看 | 中文字幕免费在线 | 免费成人高清在线视频 | 一区二区av在线 | 日本精品一区二区在线观看 | 国产日韩精品视频 | 久久国产精品视频 | 欧美专区在线观看 | 亚洲精品888| 成人深夜福利 | 欧美综合国产精品久久丁香 | 成人精品在线观看 | 一级黄片一级毛片 |