11import * as ex from 'excalibur' ;
22import Engine from './engine.js' ;
33
4+ const spriteImage = new ex . ImageSource ( 'sprite.png' ) ;
5+
6+ const loader = new ex . Loader ( [ spriteImage ] ) ;
7+
48export class Scene extends ex . Scene {
9+ onInitialize ( ) {
10+ this . sprite = spriteImage . toSprite ( ) ;
11+ }
12+
513 onActivate ( ctx ) {
6- const engine = ctx . engine ;
714 this . engine = ctx . data . engine ;
815
916 this . clear ( ) ;
1017
1118 // Particle creation
12- const particles = new Array ( this . engine . count ) ;
19+ const particles = Array . from ( { length : this . engine . count } ) ;
1320 const rnd = [ 1 , - 1 ] ;
14- const spriteImage = new ex . ImageSource ( 'sprite.png' ) ;
15- spriteImage . load ( ) ;
21+
22+ const graphicsGroup = new ex . GraphicsGroup ( { members : [ ] } ) ;
23+
1624 for ( let i = 0 ; i < this . engine . count ; i ++ ) {
1725 const size = 10 + Math . random ( ) * 80 ;
1826 const x = Math . random ( ) * this . engine . width ;
@@ -22,15 +30,11 @@ export class Scene extends ex.Scene {
2230 3 * Math . random ( ) * rnd [ Math . floor ( Math . random ( ) * 2 ) ] ,
2331 ] ;
2432
25- const particle = new ex . Actor ( {
26- x : x ,
27- y : y ,
28- radius : size ,
29- } ) ;
30-
3133 if ( this . engine . type === 'sprite' ) {
32- const sprite = ex . Sprite . from ( spriteImage ) ;
33- particle . graphics . use ( sprite ) ;
34+ graphicsGroup . members . push ( {
35+ graphic : this . sprite ,
36+ offset : ex . vec ( x , y ) ,
37+ } ) ;
3438 } else {
3539 const circle = new ex . Circle ( {
3640 x : x ,
@@ -46,26 +50,36 @@ export class Scene extends ex.Scene {
4650 : ex . Color . fromRGB ( 0 , 0 , 0 ) ,
4751 strokeWidth : this . engine . type === 'stroke' ? 1 : undefined ,
4852 } ) ;
49- particle . graphics . use ( circle ) ;
53+ graphicsGroup . members . push ( {
54+ graphic : circle ,
55+ offset : ex . vec ( x , y ) ,
56+ } ) ;
5057 }
51- this . add ( particle ) ;
52-
53- particles [ i ] = { x, y, size : size , dx, dy, el : particle } ;
54-
55- particle . on ( "postupdate" , ( ) => {
56- const r = particles [ i ] ;
57- r . x -= r . dx ;
58- r . y -= r . dy ;
59- if ( r . x + r . size < 0 ) r . dx *= - 1 ;
60- else if ( r . y + r . size < 0 ) r . dy *= - 1 ;
61- if ( r . x > engine . screen . drawWidth ) r . dx *= - 1 ;
62- else if ( r . y > engine . screen . drawHeight ) r . dy *= - 1 ;
63- r . el . pos . x = r . x ;
64- r . el . pos . y = r . y ;
65- } ) ;
58+
59+ particles [ i ] = { x, y, size : size , dx, dy, el : graphicsGroup . members [ i ] } ;
6660 }
61+
62+ const screenElement = new ex . ScreenElement ( ) ;
63+
64+ screenElement . graphics . use ( graphicsGroup ) ;
65+
66+ this . add ( screenElement ) ;
67+
68+ this . particles = particles ;
6769 }
68- onPostUpdate ( ) {
70+
71+ onPostUpdate ( engine ) {
72+ for ( let i = 0 ; i < this . engine . count ; i ++ ) {
73+ const r = this . particles [ i ] ;
74+ r . x -= r . dx ;
75+ r . y -= r . dy ;
76+ if ( r . x + r . size < 0 ) r . dx *= - 1 ;
77+ else if ( r . y + r . size < 0 ) r . dy *= - 1 ;
78+ if ( r . x > engine . screen . drawWidth ) r . dx *= - 1 ;
79+ else if ( r . y > engine . screen . drawHeight ) r . dy *= - 1 ;
80+ r . el . offset . setTo ( r . x , r . y ) ;
81+ }
82+
6983 this . engine . fpsmeter . tick ( ) ;
7084 }
7185}
@@ -77,25 +91,27 @@ class ExcaliburEngine extends Engine {
7791 window . cancelAnimationFrame ( this . request ) ;
7892 if ( this . game ) {
7993 this . game . dispose ( ) ;
80- this . canvas = document . createElement ( " canvas" ) ;
81- this . canvas . id = " canvas" ;
82- this . canvas . className = " canvas" ;
94+ this . canvas = document . createElement ( ' canvas' ) ;
95+ this . canvas . id = ' canvas' ;
96+ this . canvas . className = ' canvas' ;
8397 this . canvas . width = this . width ;
8498 this . canvas . height = this . height ;
85- document . querySelector ( " main" ) . appendChild ( this . canvas ) ;
99+ document . querySelector ( ' main' ) . appendChild ( this . canvas ) ;
86100 }
87101
88102 const game = new ex . Engine ( {
89103 width : this . width ,
90104 height : this . height ,
91105 canvasElement : this . canvas ,
92106 backgroundColor : ex . Color . fromRGB ( 26 , 26 , 26 ) ,
93- scenes : { scene : Scene }
107+ suppressPlayButton : true ,
108+ physics : { enabled : false } ,
109+ scenes : { scene : Scene } ,
94110 } ) ;
95111 this . game = game ;
96112 }
97113 render ( ) {
98- this . game . start ( ) . then ( ( ) => {
114+ this . game . start ( loader ) . then ( ( ) => {
99115 this . game . goToScene ( 'scene' , { sceneActivationData : { engine : this } } ) ;
100116 } ) ;
101117 }
0 commit comments