1. 程式人生 > >白鷺引擎(egret)中錨點(anchoroffset)的位置體會

白鷺引擎(egret)中錨點(anchoroffset)的位置體會

原文連結
首先關於錨點的作用,我們就以一根線段旋轉90度為例:
先繪製一根水平的直線,長度為100

protected startCreateScene(): void {
        this.drawOneLine();
    }

protected drawOneLine(){
    let ns = new egret.Shape();

    ns.x = 100;
    ns.y = 100;

    ns.graphics.lineStyle(2,0xFF0000);
    ns.graphics.moveTo(0,0);
    ns.graphics.lineTo(100,0);

    this
.addChild(ns); }

這裡寫圖片描述

現在我們修改下程式碼,在預設錨點的情況下,旋轉90度。為了方便觀察,我給線段做了漸變處理,越靠近90度的線段顏色越淺:

protected startCreateScene(): void {
    this.drawLine(0);
}

protected drawLine(angle): void {
    let ns = new egret.Shape();

    ns.x = 100;
    ns.y = 100;

    ns.graphics.lineStyle(2,0xFF0000);
    ns.graphics.moveTo(0,0);
    ns.graphics.lineTo(100
,0); ns.alpha = 1-(angle/90)*0.9; ns.rotation = angle; this.addChild(ns); if(angle < 90){ this.drawLine(angle+15); } }

這裡寫圖片描述

現在我們設定錨點,將中心點居中

protected startCreateScene(): void {
    this.drawLine(0);
    this.drawLineCenter(0);
}

protected drawLineCenter(angle): void {
    let
ns = new egret.Shape(); ns.x = 100; ns.y = 300; ns.anchorOffsetX = 50; // 設定錨點橫座標,位於線段中心 ns.graphics.lineStyle(2,0x000000); ns.graphics.moveTo(0,0); ns.graphics.lineTo(100,0); ns.alpha = 1-(angle/90)*0.9; ns.rotation = angle; this.addChild(ns); if(angle < 90){ this.drawLineCenter(angle+15); } }

這裡寫圖片描述

關於錨點是如何影響元素旋轉的這個示例已經很清楚了。
接下來說這篇文正的關鍵,上圖中有一個不太正常的地方,即黑色線段往左偏移,這個對於剛接觸錨點概念的同學來說,無疑是非常殘忍的,說白了就是個坑。明明所有元素都放在其應該出現的位置上,並且實現了動效,所有的屬性設定也都正確,怎麼元素就偏了呢?
現在,我們仍然以長度100的水平線段為例,將錨點依次設定為0,50,100,觀察這三根線段的情況,程式碼如下:

protected startCreateScene(): void {
    this.drawLineAnchor(100,100,0);
    this.drawLineAnchor(100,150,50);
    this.drawLineAnchor(100,200,100);
}

protected drawLineAnchor(x,y,anchorX):void{
    let ns = new egret.Shape();

    ns.x = x;
    ns.y = y;

    ns.anchorOffsetX = anchorX;

    ns.graphics.lineStyle(2,0x000000);
    ns.graphics.moveTo(0,0);
    ns.graphics.lineTo(100,0);
    this.addChild(ns);
}

這裡寫圖片描述

從上圖中可以很明顯的看到錨點對於畫面中真實繪製出線段的影響,即元素a在畫面中實際的橫座標為x’ = a.x - a.anchorOffsetX。程式碼在執行到moveTo那一行時,元素根據屬性被定位到x=100,y=100後,由於其左上角的錨點被設定為anchorOffsetX=50,anchorOffsetY=0的關係,因此會按照錨點的設定位置向左偏移50再開始繪製初始點。

所以,如果我們必須改變moveTo的初始點和終點,或者改變元素本身的x座標,才能達到和原線段相同的位置:

protected startCreateScene(): void {
    this.drawLineAnchor(100, 100, 0); 
    this.drawLineAnchorFixMove(100, 150, 50); // 修改起點終點
    this.drawLineAnchorFixX(100, 200, 100); // 修改x座標
}


protected drawLineAnchor(){...} // 方法略

protected drawLineAnchorFixMove(x, y, anchorX): void {
    let ns = new egret.Shape();

    ns.x = x;
    ns.y = y;

    ns.anchorOffsetX = anchorX;

    ns.graphics.lineStyle(1, 0x000000);
    ns.graphics.moveTo(0 + anchorX, 0); // 修改線段起始點
    ns.graphics.lineTo(100 + anchorX, 0); // 修改線段終點
    this.addChild(ns);
}

protected drawLineAnchorFixX(x, y, anchorX): void {
    let ns = new egret.Shape();

    ns.x = x + anchorX; // 修改整個容器的橫座標
    ns.y = y;

    ns.anchorOffsetX = anchorX;

    ns.graphics.lineStyle(1, 0x000000);
    ns.graphics.moveTo(0, 0);
    ns.graphics.lineTo(100, 0);
    this.addChild(ns);
}

這裡寫圖片描述

現在大家應該能理解設定錨點之後元素的具體位置了。

相關推薦

白鷺引擎(egret)(anchoroffset)的位置體會

原文連結 首先關於錨點的作用,我們就以一根線段旋轉90度為例: 先繪製一根水平的直線,長度為100 protected startCreateScene(): void { this.drawOneLine(); } prot

html的使用

gets intval 16px itl eth 什麽 current erl -h 如今總結一下控制錨點的幾種情況: 1. 在同一頁面中 [html] view plaincopy <a name=&q

白鷺引擎egret打包成微信小遊戲

1、匯入專案以後開啟檔案egretproperties.json修改target 下面的current的web為wxgame r   然後點開打包   在這裡填寫微信小遊戲id以及命名,打包成功以後,即可用微信開發者工具來允許,如果報錯請把縮放模式改成f

vue的三種方法

第一種: router.js中新增 mode: 'history', srcollBehavior(to,from,savedPosition){ if(to.hash){ return { selector:to.hash } } } 元件: &

cocos2d-x設定及定位方式

說 在 前面: 以下 是 基於 cocos2d-2.0-x-2.0.3 作 的 總結 在cocos2d示例程式碼HelloCpp中,為什麼要將CCMenu設定位置到CCPointZero,即使CCMenu的錨點是在(0.5, 0.5)? 這是因為CCMenu沒有使

選導航,滑動到網頁的指定位置(JS實現滑動定位)

在一個網頁頁面中,可能會分為很多的模組內容,當我點選導航欄的某一項時,希望顯示對應的內容,例如,點選下圖導航中的報告服務後,希望網頁滑動到 “報告服務” 的模組,點選城市品牌滑動到“城市品牌”的模組。

的使用(連結到網頁某個位置

概述   使用命名錨記可以在文件中設定標記,這些標記通常放在文件的特定主題處或頂部。然後可以建立到這些命名錨記的連結,這些連結可快速將訪問者帶到指定位置。   建立到命名錨記的連結的過程分為兩步。首先,建立命名錨記,然後建立到該命名錨記的連結。 建立命名錨

html 擊跳轉到頁面指定位置

刷新 mlp kml fwe dpf sil ava vlm pyc 本來是在看阮大神寫的ajax教程,突然發現點擊目錄文字會跳轉到相對應的文本內容,於是乎激發了我的興趣。 這個究竟怎麽做的,剛開始看的時候一知半解,找度娘就是:“點擊跳轉到頁面指定位置”,找了下,原來專業術

html設置定位的幾種常見方法

element 針對 htm com script int nbsp onclick .get 1,使用id定位: <a href="#1F" name="1F">錨點1</a> <div name="1F"> <p>

canvas和白鷺引擎平移,旋轉,縮放

都是 canvas 引擎 偏移 坐標 這一 text sla 偏移量 canvas中的 translate() 和白鷺引擎中的 .x 或者 .y 所導致的平移效果並不是移動 目標元素,而是移動目標元素父親所在的坐標系。 例如 bgg.translate(100,100)

關於UnityNGUI的Pivot和

wid height http -1 貼圖 關於 位置 ngui 技術 Pivot 創建一個Sprite1節點,關聯一個圖集和一張貼圖,用圖中的六個按鈕調整這個貼圖的Pivot點,一共有八個點可以選擇 再創建一個Sprite2節點,作為Sprite1節點的子節點,關聯一個圖

[原創]cssa標簽去掉文本下劃線

記錄 asp href 實例 參數 ext -s get 其他 我對博客的認識是:記錄問題,解決問題,分享知識。如果有輪子,我不需要造輪子。 1.問題解決方式:   設置屬性:text-decoration:none; 2.更多屬性參數參考   text-decor

HTMLa標簽的

錨點 找到 type span head pre 要去 img itl 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"

白鷺引擎實現選後長按離開事件繫結

白鷺引擎 版本:5.2.8 描述:實現長按效果 繫結事件: this.物件.addEventListener(egret.TouchEvent.TOUCH_BEGIN,this.onPlayClick,this); //離開的事件

egret白鷺引擎應用

工具:EgretLauncher(管理專案),EgretWing(開發),TextureMerger(Sprite Sheet圖片整合 Egret MovieClip動圖gif製作) 文件:egret擴充套件庫 頁面UI:exml=>Group包含,九宮格詳細約束實線適配

htmla標籤定位雙擊跳轉路徑的問題

###錨點 在製作網頁時,我們常常遇到需要新增側邊導航,通過點選導航讓頁面自動滾動到指定位置,如:電商網站的樓層。這就涉及到<a>標籤的錨點應用,把它稱為“錨點標籤”。 通俗的講,我們想要讓頁面跳轉到的位置,就是錨點。錨點是一種超連結,只不過它是頁面內部的超連結,它指向頁

Egret優化分享】白鷺引擎王澤:重度H5遊戲效能優化技巧

本文轉自:https://mp.weixin.qq.com/s/GIzXA51D7_hMqajCRuJE2g 9月15日,無懼17級颱風“山竹”,320名開發者齊聚廣州貝塔空間共同探討“怎樣做一款賺錢的小遊戲”。針對眾多開發者關心的重度H5遊戲效能優化技巧,我們整理了現場速記分享給

OpenCv-C++-亞畫素級別角檢測(檢測子畫素的corner的位置)

使用亞畫素級別角點檢測,返回角點的浮點數值,它的精度比整數畫素更準確。可以用cornerSubPix()函式將角點定位到子畫素,從而取得亞畫素級別的角點檢測效果。 使用函式: void cv::cornerSubPix ( InputArray image, InputOutputArray

vue專案關於的(帶變數)使用方法(全域性使用)

問題 在普通html中,錨點的使用方法是: <a href="#123">點選就定位到123的錨點</a> ... <div id="123">這裡是錨點的位置</div> 但在vue專案中,各個頁面被劃分成了很多元件,經常是在

影象旋轉後的座標,影象旋轉座標位置

影象中某點繞點旋轉後的座標,影象旋轉座標位置 在平面座標上,任意點P(x1,y1),繞一個座標點Q(x2,y2)旋轉θ角度後,新的座標設為(x, y)的計算公式: x= (x1 - x2)* cos(θ) -