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

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

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

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

我們做動畫、游戲、編輯器,需要根據用戶的交互等操作,去實時地改變圖形的屬性,比如位置,顏色等信息。今天西瓜哥帶大家來看看在 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); // 參數分別為 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 的效果,從表現上,它會將容器下的圖形往 (-cx, -cy) 方向移動,所以你還需要通過 rect.position.set(cx, cy) 將容器移動回原來的位置。

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

圖片

圖形縮放

用法類似圖形旋轉。

rect.scale.set(sx, sy);

圖形斜切

rect.skew.set(skewX, skewY);

圖形內容更新

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

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

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

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

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

游戲開發畫布功能

2024-02-28 12:12:20

Pipeline數據機制

2023-11-13 22:27:53

Mapping數據庫

2023-04-12 07:46:24

JavaScriptWebGL

2023-11-30 15:23:07

聚合查詢數據分析

2023-11-13 12:48:32

語言DSL

2023-03-29 07:31:09

WebGL坐標系

2023-05-04 08:48:42

WebGL復合矩陣

2023-06-26 15:14:19

WebGL紋理對象學習

2023-04-26 07:42:16

WebGL圖元的類型

2023-04-11 07:48:32

WebGLCanvas

2023-05-16 07:44:03

紋理映射WebGL

2023-05-31 20:10:03

WebGL繪制立方體
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一区二区三区不卡av | 国产久 | www.国产| 黑人巨大精品欧美一区二区一视频 | 国产91丝袜在线熟 | 一区二区三区四区视频 | 亚洲精品乱码久久久久久9色 | 日本午夜免费福利视频 | 国产成人99久久亚洲综合精品 | 午夜久草 | 亚洲天堂av网 | 亚洲一区二区免费电影 | 日韩欧美三级电影在线观看 | 一区二区三区亚洲 | 国产一区二区三区免费视频 | 午夜免费在线电影 | 国产精品视频网 | 国产欧美日韩一区 | 精品国产免费一区二区三区演员表 | 中文字幕99 | 一区二区中文 | 精品国产乱码久久久久久蜜柚 | 国产精品日韩欧美一区二区三区 | 久久国产精品免费一区二区三区 | 亚洲国产日韩欧美 | 婷婷在线网站 | 国产国产精品 | 丝袜美腿一区 | 久草视频观看 | 日韩免费视频一区二区 | 久久蜜桃精品 | 男女视频在线免费观看 | 日韩精品成人一区二区三区视频 | 亚洲一区自拍 | 激情a| 毛片软件 | 国产视频中文字幕在线观看 | 99精品99久久久久久宅男 | 欧美三区| 免费视频一区二区 | 欧美福利一区 |