ããã«ã¡ã¯PixiJSã³ãã¥ããã£ã
ã³ã¢ãšãã®ãã¹ãŠã®äŸåé¢ä¿ãå€æããããšã§ãPixiJSãTypeScriptã«å€æãããšãã倧ããªãã€ã«ã¹ããŒã³ã«å°éããŸããã ãã®ãã¶ãä¹ãè¶ããã®ã§ããã®å°ããªã³ã¢ããã±ãŒãžã®ã»ããã«äŸåããæ®ãã®ããã±ãŒãžããå§ããããšãã§ããŸãã
ãããã®ããã±ãŒãžã®æ®ãã®éšåãå€æããããã«ãéçºè ããã®æã確å®ã«äœ¿çšããããšãã§ããŸãã ããã±ãŒãžã®å€æã«èå³ãããå Žåã¯ãã©ããæããŠãã ããã ããã±ãŒãžãå€æããããã®ã¬ã€ãã©ã€ã³ãããã€ããããŸããããã¯ãæ¢åã®å®æããPRãã確èªã§ããŸãã
Gotchyasã®å€æ
npm run docs
ãä»ããŠæ£ãããã«ãããã³è¡šç€ºãããããšã確èªããŠãã ãããgit mv
ã䜿çšããŠJSãã¡ã€ã«ã®ååãTSã«å€æŽããŠãã ãããããããªããšãGitã®å±¥æŽã倱ãããŸãã äžéšã®GitGUIã¯ããããã®å€æŽãèªèããªãå ŽåããããŸããpublic
ã¢ã¯ã»ã¹ä¿®é£Ÿåãè¿œå ããªãã§ãã ããããããã®å Žåãã¢ã¯ã»ã¹ã¯æªå®çŸ©ã®ãŸãŸã«ããŠãã ãããããã±ãŒãžãè«æ±ããã«ã¯ããã®ããã±ãŒãžã®ãã©ããPRãäœæããŠãã ãã
@pixi/accessibility
ïŒ6379@pixi/app
ïŒ6376@pixi/constants
ïŒ6173@pixi/core
ïŒ6340ãïŒ6373@pixi/display
ïŒ6261ãïŒ6339ãïŒ6349ãïŒ6371@pixi/extract
ïŒ6381@pixi/graphics
ïŒ6352@pixi/interaction
ïŒ6656@pixi/loaders
ïŒ6385@pixi/math
ïŒ6141@pixi/mesh-extras
ïŒ6396@pixi/mesh
ïŒ6382@pixi/mixin-cache-as-bitmap
ïŒ6630@pixi/mixin-get-child-by-name
ïŒ6621@pixi/mixin-get-global-position
ïŒ6637@pixi/particles
ïŒ6449@pixi/polyfill
ïŒ6654ãïŒ6669@pixi/prepare
ïŒ6481@pixi/runner
ïŒ6164@pixi/settings
ïŒ6315@pixi/sprite-animated
ïŒ6397@pixi/sprite-tiling
ïŒ6398@pixi/sprite
ïŒ6375@pixi/spritesheet
ïŒ6389@pixi/text-bitmap
ïŒ6479@pixi/text
ïŒ6390@pixi/ticker
ïŒ6186@pixi/unsafe-eval
ïŒ6655@pixi/utils
ïŒ6262@pixi/canvas-display
ïŒ6659@pixi/canvas-extract
ïŒ6503@pixi/canvas-graphics
ïŒ6663@pixi/canvas-mesh
ïŒ6664@pixi/canvas-particles
ïŒ6622@pixi/canvas-prepare
ïŒ6657@pixi/canvas-renderer
ïŒ6499@pixi/canvas-sprite-tiling
ïŒ6665@pixi/canvas-sprite
ïŒ6658@pixi/canvas-text
ïŒ6666@pixi/filter-alpha
ïŒ6383@pixi/filter-blur
ïŒ6383@pixi/filter-color-matrix
ïŒ6383@pixi/filter-displacement
ïŒ6383@pixi/filter-fxaa
ïŒ6383@pixi/filter-noise
ïŒ6383pixi.js-legacy
ïŒ6673é²è¡äž@bigtimebuddypixi.js
ïŒ6673é²è¡äž@bigtimebuddyãã®ä»ã®ãã³ãïŒ
ãã¹ãŠã®äœåãªimport
ïŒå®éã«ã¯ãã®ã€ã³ããŒãã¿ã€ãïŒãæ¢åã®ã€ã³ããŒããšã¯å¥ã«é
眮ããŠã¿ãŠãã ããã æ°ããTSããŒãžã§ã³ãå
¬éããããã import type
ãè¿œå ããŸãã ãã ããlinterã䜿çšãããšãåãã¢ãžã¥ãŒã«ãã2è¡ã®import
ã䜿çšã§ããªããªããŸãããã®å Žåã¯ãããããæ··åšãããããšãã§ããŸãã
Array<X>
ãšX[]
ã®äž¡æ¹ã®è¡šèšã䜿çšã§ããŸããéåžžãããã·ã¥ããããããæ§é ïŒå¥åãªã¹ãïŒã«ã¯Array<X>
ã䜿çšããŸãã X[]
å°ããé·ããåºå®ãããŠãããã®ããŸãã¯ãµã€ãºãåãå Žæã§æ±ºå®ãããŠããå ŽåïŒéåžžã®é
åïŒã
readonly
ãã£ãŒã«ããdestroy()
ã§ã®ã¿å€æŽãããå Žåãããã§any
å€æã䜿çšã§ããŸãã ä»ã®å Žæã§äœ¿çšãããŠããå Žåã¯ã readonly
ãåé€ããŸãã åŸã§private field
+ readonly property
ã«ãããã©ããã決ããããšãã§ããŸãã
誰ããç§ã殎ããªãéããç§ã¯ä»é±æ«ã«@pixi-text
ãããããšãã§ããŸããã
泚ïŒ@ pixi-tilingã«ã¯PIXI.TilingSprite.from
ããããŸããããã®å€ã¯TSã§ã¯å®è¡ã§ããŸããã éæšå¥šã«ããããšãã§ããŸãã
@qtikiãé 匵ã£ãŠãã ããã ããªããå¥åŠãªãã®ãèŠã€ããå Žåã«åããŠãç§ã¯é±æ«ã«ãªã³ã©ã€ã³ã«ãªããŸãã
ããããŸããã @ qtiki ããã©ããPRãéä¿¡ããåŸãéžæã¯äºçŽãããŸãã
ããããšãïŒ
åæããŸããã ãã©ããPRã¯ãå€æããããã±ãŒãžãèŠæ±ããããã®æè¯ã®æ¹æ³ã§ãã å©ããŠãããŠããããšã
ããããŸããã @ qtiki ããã©ããPRãéä¿¡ããåŸãéžæã¯äºçŽãããŸãã
ããããšãïŒ
ãã©ããPRïŒ6390ãéããŸããã PRãäœæã§ããããã«ããã€ãã®å€æŽãå ããããã«ã.jsãã¡ã€ã«ã®ååã.tsã«å€æŽããŸããã ä»é±æ«ãå®éã®å€æãè©ŠããŠã¿ãŸãã
Textããã±ãŒãžãTypeScriptã«å€æãããšãã«ééããããã€ãã®äžè¬çãªããšïŒ
ãã®ãããTypeScriptããããã£ã§æ ¹æ¬çãªåé¡ãçºçããŸããã TypeScriptã¯ããããã£ã²ãã¿ãŒãšã»ãã¿ãŒã®ç°ãªãã¿ã€ãããµããŒãããŠããªãããã§ãïŒ https ïŒ//github.com/microsoft/TypeScript/issues/2521
Textã¯ã©ã¹ãšTextStyleã¯ã©ã¹ã«ã¯ãããã倧ããªã¡ãªãããšãªãå Žæãããã€ããããŸãã ããšãã°ãTextStyleã®fillStyle
ãšstroke
ã¯æ°å€ãåãå
¥ãããããæååã«å€æããããããã²ãã¿ãŒã¯æ°å€ãå«ãå
±çšäœåãè¿ããªãããã«ããå¿
èŠããããŸãã æ°å€ã®ããå
±çšââäœåãè¿ãããã®ã§ãCanvasRenderingContext2D fillStyle
ã«æž¡ãããšãã§ããããã«ãã£ã¹ãããå¿
èŠããããŸãã
ãŸããTextã¯ã©ã¹èªäœã¯ãããã¹ãã¹ã¿ã€ã«ã®ãªããžã§ã¯ããåãå
¥ããŸãããã®ãªããžã§ã¯ãã¯ã new TextStyle
ãŸãã¯TextStyleã®ã€ã³ã¹ã¿ã³ã¹ã«çŽæ¥æž¡ãããŸãã åæ§ã«ãããã§ã¯ãgetterã¯åžžã«TextStyleã€ã³ã¹ã¿ã³ã¹ãè¿ããŸãããsetterãšåãå
±çšäœåã§å
¥åããå¿
èŠããããŸãã ãããã£ãŠãããã«ããããŠãŒã¶ãŒã©ã³ãã§äžèŠãªåãã§ãã¯ïŒãŸãã¯ãã£ã¹ãïŒãçºçããTextStyleã®ã¡ãœãããåŒã³åºãããšãã§ããããã«ãªããŸãã
é·æçã«ã¯ãããæåã®è§£æ±ºçã«ãªããã©ããã¯ããããŸããããä»ã®ãšããã¯ããã§ååã ãšæããŸãã
ç§ãæ°ä»ãããã1ã€ã®ããšã¯ãç°ãªãã¿ã€ãã®ããŒã«ã«å€æ°ãåå©çšããã³ãŒããããªãããããšã§ããããã¯ãTypeScriptã§ã¯ããŸãããŸãæ©èœããŸããã æ¢åã®ã³ãŒãã«ããŸã觊ããããªãã£ãã®ã§ãå ±çšäœåãšããã€ãã®éããã£ã¹ãããã¡ãã¡ã§äœ¿çšããŠã³ã³ãã€ã«ããŸããã ããŒã€ã¹ã«ãŠãã®ååã䜿ãã°ãããããããšã¯æéã®çµéãšãšãã«æ¹åã§ãããšæããŸãã
@qtiki
PRã®ä»£ããã«ãã®ãããã¯ã«åé¡ãæžãã®ã¯ãªãã§ããïŒ
@qtiki
PRã®ä»£ããã«ãã®ãããã¯ã«åé¡ãæžãã®ã¯ãªãã§ããïŒ
ãããã¯ãããã¹ãããã±ãŒãžåºæã®åé¡ã ãã§ãªããTypeScriptå€æã§ä»ã®å Žæã§ééããäžè¬çãªåé¡ã ãšæããŸãã 1ã€ã®ããããã£ã®åé¡ã¯ãæ£ããå ¥åããå¿ èŠãããå Žåã®å°æ¥ã®åºæ¬çãªèšèšäžã®åé¡ã§ãã
ç§ã¯TypeScriptã»ãã¿ãŒãšã²ãã¿ãŒãããã«ééããŠä»¥æ¥ãç°ãªãã¿ã€ãã䜿çšã§ããªããšããåé¡ãç 究ããŠããŸããã åé¡ã¯éåžžã«è€éã§ããä¿®æ£ããããªãå¯èœæ§ãããããã§ãã ãããã£ãŠããããã®ã¿ã€ãã®ããããã£ãTypeScriptã«å€æããéã®äžè¬çãªã¬ã€ãã©ã€ã³ã«ã€ããŠã®ç§ã®ææ¡ã¯æ¬¡ã®ãšããã§ãã
ããã¯ãå¿
èŠãªãã®ã®åçŽåãããäŸã§ãã string | number
ãåãå
¥ããããå
éšã«string
ãšããŠæ ŒçŽãããïŒãããŠè¿ãããïŒããããã£ã§ãã åœç¶ãããããã£ãstring | number
ãšããŠè¿ãããšãã§ããŸãããããã¯APIã®ãŠãŒã¶ãŒãå®å
šã«äžèŠãªã¿ã€ããã§ãã¯ã«çŽé¢ããããšãæå³ããŸãã
class Foo {
constructor() {
this._bar = '';
}
// error: 'get' and 'set' accessor must have the same type.(2380)
get bar(): string {
return this._bar;
}
// error: 'get' and 'set' accessor must have the same type.(2380)
set bar(value: string | number) {
this._bar = value.toString();
}
private _bar: string;
}
ãããåé¿ããæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
class Foo {
constructor() {
this._bar = '';
}
// Return the strictest type possible in the getter.
get bar(): string {
return this._bar;
}
// Use the same strict type for the setter as the getter.
set bar(value: string) {
// Call the conversion function.
this.setBar(value);
}
// Implement a separate conversion function that accepts all supported types.
public setBar(value: number | string) {
this._bar = value.toString();
}
private _bar: string;
}
ãã®ããã«ããŠããŠãŒã¶ãŒã¯ããããã£ãèªã¿åããšãã«æ£ããã¿ã€ããååŸããŸãã number
ãbar
ã«å²ãåœãŠããTypeScriptãŠãŒã¶ãŒã¯ã setBar
å€æé¢æ°ãåŒã³åºãå¿
èŠããããŸãã ãã ããããããã£ã»ãã¿ãŒãå€æé¢æ°ãåŒã³åºããããããã¯æ¢åã®JavaScriptãŠãŒã¶ãŒã«ãšã£ãŠå€§ããªå€æŽã«ã¯ãªããŸãããã€ãŸããåæå®ãããŠããªãããããã£ã»ãã¿ãŒã¯å®éã«æ°å€ãåãå
¥ããŸãã
çããã¯ã©ãæããŸãããããã¯çã«ããªã£ãŠããŸããïŒ ãã®ã¿ã€ãã®ãã¿ãŒã³ãã©ã®ãããã®é »åºŠã§äœ¿çšãããŠãããã¯ããããŸããããå°ãªããšãããã¹ãããã±ãŒãžã§ã¯ãäœåºŠããã®ãã¿ãŒã³ã«ééããŸããã
ã¿ã€ãã³ã°ã®å¶éã«å¯Ÿå¿ããããã«APIãå€æŽããã®ã¯å«ãã§ãããç§ã«ã¯æ£ããæããããŸããã å人çã«ã¯ãããããã䜿çšããŠããæ°ããã¡ãœãããäœæããããšæããŸãã ãã®ãããªå€§ããªAPIãµãŒãã§ã¹ãæã€ããšã¯ããã§ã«è² æ ã«ãªã£ãŠããŸãã
set *ã¡ãœããã䜿çšãããããã³ââã°ãæ¿èªããããšã¯æ±ºããŠãããŸããany
ã¿ã€ãã¯set*
ã¡ãœããããã䜿ãããããšãã@bigtimebuddyã«åæããŸãã
çŸåšã®å Žåãgetterã«å¯ŸããŠ(string | number)
ã¿ã€ããè¿ãããšã¯éåžžã«åãå
¥ããããŸãã
å®éã«ã¯ã set
ã®ç¶æ¿ã®åé¡ãããããã setBar
ãè¯ãã¢ã€ãã¢ã§ããå ŽåããããŸããã _$setBar()
ã®ããã«prefxã§ããå€ãã®ã·ã³ãã«ãå¿
èŠã§ã:)ãã®å Žåã¯ããã§ã¯ãããŸããã
@qtikiã¯åé¡ã匷調ããŠãããŠããããšããç§ãä»äºã®ãããžã§ã¯ãã®ããã«pixijs tsforkãäœã£ããšãã«äœåºŠãééããŸããã
ã¯ãã Text
ã¯èŠçã§ãã ã¯ãããã£ãšèããªããã°ãªããŸããã
setBar
ãæãçŸãã解決çã§ã¯ãªãããšã«åæããŸãã æ£çŽãªãšãããTypeScriptãå匷å¶ã䌎ããã®çš®ã®ã»ãã¿ãŒããµããŒãããŠããªãããšã«éåžžã«é©ããŠããŸããã TypeScriptã®ãããŒå¶åŸ¡ã«é¢ããŠããããã®ããããã£ã«ç·©ãã¿ã€ãã³ã°ãŸãã¯any
ã䜿çšããããšã®æå³ã«ã€ããŠã¯ãèŠåã®èšèã§ãã
class Foo {
constructor() {
this._bar = '';
}
get bar(): string | number {
return this._bar;
}
set bar(value: string | number) {
this._bar = value.toString();
}
private _bar: string;
}
const foo = new Foo();
// TypeScript's flow control will assume from now on that `bar` is a `number`
foo.bar = 42;
function add(a: number, b: number) {
return a + b;
}
// Call to `add` shouldn't be allowed since the value in `bar` is actually a string
// This will print `4242` instead of `84`
console.log(add(foo.bar, 42));
é·æçã«ã¯ãæãã¯ãªãŒã³ãªãªãã·ã§ã³ã¯æ¬¡ã®ãããªãã®ã䜿çšããããšã ãšæããŸãã
class Bar {
constructor() {
this._bar = '';
}
get(): string {
return this._bar;
}
set(value: string | number) {
this._bar = value.toString();
}
private _bar: string;
}
class Foo {
constructor() {
this.bar = new Bar();
}
public bar: Bar;
}
const foo = new Foo();
foo.bar.set(42);
console.log(foo.bar.get());
ãã®ã¿ã€ãã®set
ã¯ããŸãã«PIXI.Point
ã®å®è£
æ¹æ³ã§ãããããåäŸããªãããã§ã¯ãããŸããã åºæ¬çã«ããã¹ãŠã®ãŠãŒã¶ãŒåãAPIã¯ã get
ãæåã§åŒã³åºãããšãªãã Bar
ã€ã³ã¹ã¿ã³ã¹ãããã®ãŸãŸãåãå
¥ããå¯èœæ§ããããŸãã
åœç¶ãããã¯é倧ãªå€æŽã«ãªãã®ã§ãè¿ãå°æ¥ã«ã¯äœãèµ·ãããªãã®ã§ã2ã»ã³ããå ¥ãããã£ãã ãã§ãã
ãããŠã以åã®ææ¡ã¯ãã¯ããå®éã®ãããããã£ã§ã¯ãªãããã Object.assign
ã®ãããªãã®ã¯ã»ãã¿ãŒã§ã¯æ©èœããªããªãããšã«æ°ã¥ããŸããã çµå±ã®ãšãããããããæé«ã®ã¢ã€ãã¢ã§ã¯ãããŸããã
ããã«ã¡ã¯ãç§ã¯é·å¹Žã®PixiJSãŠãŒã¶ãŒã§ãããTypescriptã®ãŠãŒã¶ãŒã§ãã ç§ã¯ããã«è²¢ç®ããããšãã§ããã§ããã-ã»ãšãã©ã®ããã±ãŒãžããã®æç¹ã§å®äºããŠããããã«èŠããŸãã ãã£ã³ãã¹ã®ãã®ã¯å¥ãšããŠã æäŒã£ãŠãããããšã¯ãããŸããïŒ
@lloydevansã¯ã!!! æºåãããã¹ãããããããããããã§ããïŒ ã©ã¡ãããéåžžã«è€éãªããã±ãŒãžã§ã¯ãªãããšãé¡ã£ãŠããŸãã
@bigtimebuddyçŽ æŽãããïŒ ç§ã¯ããã¹ããããããããè¡ãããšãèŠãããšãã§ããŸããã
ããã§ããïŒ ããã§è¿œè·¡ã§ããããã«ãéå§ããããã©ããPRãäœæããŠãã ããã
ããããŸããã ç§ã¯ä»ãæ¢åã®å€æãšPRã®ããã€ããèŠãŠãããã«ç¶ããŸãã
npmã®åã ã®ããã±ãŒãžã«ã¯ãŸã ã¿ã€ãããªãããã§ãã ãã®åé¡ã解決ããåŸãããã¯å¯ŸåŠã§ãããã®ã ãšæããŸããïŒ ãããã䜿çšããŠãåã®å®å šæ§ãç ç²ã«ããããšãªããã«ããµã€ãºãçž®å°ã§ãããšäŸ¿å©ã§ãã
ããŒã ã¹ãã¬ããã¿ããªïŒ æ®ãããã2ã3ã®ããã±ãŒãžã§ãïŒ
@ Zyie ã@ ivanpopelyshev ã@ SerG-Yã@ eXponenta ãããã³ãã®ç§»è¡ãå¯èœã«ããã®ãå©ããŠãããä»ã®ãã¹ãŠã®è²¢ç®è ã«å¿ããæè¬ããŸãã
æãåèã«ãªãã³ã¡ã³ã
ã¿ã€ãã³ã°ã®å¶éã«å¯Ÿå¿ããããã«APIãå€æŽããã®ã¯å«ãã§ãããç§ã«ã¯æ£ããæããããŸããã å人çã«ã¯ãããããã䜿çšããŠããæ°ããã¡ãœãããäœæããããšæããŸãã ãã®ãããªå€§ããªAPIãµãŒãã§ã¹ãæã€ããšã¯ããã§ã«è² æ ã«ãªã£ãŠããŸãã