標籤: egret,typescriptphp
<?xml version="1.0" encoding="utf-8"?>
<e:Skin width="400" height="300" xmlns:e="http://ns.egret.com/eui" xmlns:ns1="*" xmlns:w="http://ns.egret.com/wing" xmlns:tween="egret.tween.*">
<w:Declarations>
<tween:TweenGroup id="demo">
<tween:TweenItem target="{label}">
<tween:Set/>
<tween:To duration="500">
<tween:props>
<e:Object scaleX="{2}" scaleY="{2}"/>
</tween:props>
</tween:To>
<tween:To duration="500">
<tween:props>
<e:Object scaleX="{1}" scaleY="{1}"/>
</tween:props>
</tween:To>
</tween:TweenItem>
</tween:TweenGroup>
</w:Declarations>
<e:Label id="label" text="Demo" x="154" y="123"/>
</e:Skin>
複製代碼
// ...省略其餘代碼
this.demo.items[0].props={loop:true}
複製代碼
<tween:TweenItem id="item" target="{label}">
<!-- 其餘代碼 -->
</tween:TweenItem>
複製代碼
this.item.props={loop:true}
複製代碼
<tween:TweenItem target="{label}">
<tween:props>
<e:Object loop="{true}" />
</tween:props>
<!-- 其餘代碼 -->
</tween:TweenItem>
複製代碼
實現循環動畫不只可使用Tween緩動動畫,還可使用MovieClip幀動畫,二者適用範圍各不相同,但均可以實現循環動畫。前端
// 官方庫引入很是方便
// egretProperties.json
{
"name": "game"
}
複製代碼
// 加載配置文件和資源
var data = RES.getRes("countdown_json")
var png = RES.getRes("countdown_png")
// 建立movieclip
var mcFactory:egret.MovieClipDataFactory = new egret.MovieClipDataFactory( data, png );
// 建立指定動畫
var mc1:egret.MovieClip = new egret.MovieClip( mcFactory.generateMovieClipData( "countdown" ) );
// 將動畫加入舞臺
this.addChild(mc1)
// 動畫須要加入舞臺後才能夠開始
// "start"須要在json配置文件labels字段中指定並配置,-1表示循環無限次
mc1.gotoAndPlay("start", -1)
複製代碼
.exml文件中定義的class屬性表示皮膚類eui.Skin的一個子類名,因此不能與其餘Class重名es6
<?xml version="1.0" encoding="utf-8"?>
<e:Skin class="Demo" xmlns:e="http://ns.egret.com/eui">
</e:Skin>
複製代碼
以上代碼至關於web
declare class Demo extends eui.Skin {
}
複製代碼
可以使用模塊化避免命名衝突typescript
<?xml version="1.0" encoding="utf-8"?>
<e:Skin class="myskin.Demo" xmlns:e="http://ns.egret.com/eui">
</e:Skin>
複製代碼
至關於json
declare module myskin{
class Demo extends eui.Skin{
}
}
複製代碼
// 指定num類型後,賦值錯誤的類型會報錯
var num:number | string = 123;
num = ''
num = true // 報錯
複製代碼
class Shop {
private farm:Farm // 有代碼提示
private farm2; // 沒有代碼提示
public yourFun() {
this.farm.something // 聲明瞭this.farm的來源,在引用時能夠獲得很好的代碼提示
}
}
複製代碼
// ?: 表示可選參數的類型
function demo (arg1:string, arg2?:number):viod {}
複製代碼
// es6語法和類型聲明的配合使用
function demo2 ({
arg1 = '',
arg2 = null,
arg3 = 123
}) {}
// 以上代碼在egret wing目前支持的typescript中,arg2會被認爲是null類型,當調用這個函數時arg2的類型很容易報錯,由於在須要給arg2傳參時,大部分狀況下不會傳null或undefined
// 正確的解決方法是自行指定正確的arg2類型,最新版typescript在vscode上也是這樣翻譯的
function demo2 ({
arg1 = '',
arg2 = null,
arg3 = 123
}:{
arg1?:string,
arg2?:any, // arg2應該是any類型
arg3?:number
}):viod {}
複製代碼
// 類型斷言,在window對象上添加屬性
(<any>window).test = function () {
}
// any解決屬性訪問報錯
// 前提是你清楚你的訪問和修改是沒有問題的
// 而且你在輸入'demo.'後本應該有的代碼提示也不會再出現了
let demo:any = new Demo()
demo.anything = 'you want' //這樣即便你訪問Demo中沒有聲明的屬性也不會報編譯錯誤了
複製代碼
// 正確使用private protected public
class Demo {
protected test () {}
}
new Demo().test() // error
// 重寫方法時訪問控制不能比父類嚴格
class Demo2 extends Demo {
private test( ){} // error
}
// 代碼提示
new Demo(). // 這裏會出現public的屬性代碼提示,不會出現private和protected屬性的代碼提示
複製代碼