рдПрдВрдЯрд┐рдЯреА рд╕рд┐рд╕реНрдЯрдо рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЧреЗрдо рджреЗрд╡ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?

рд╣реЛрдмреЗ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЦрд░реЛрдВрдЪ рд╕реЗ рдПрдХ рдЦреЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рджрд┐рд▓рдЪрд╕реНрдк рд▓реЗрдЦ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреБрдЫ рд▓реЗрдЦ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдРрд╕рд╛ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдкрдХрд╛ рдкрд╕рдВрджреАрджрд╛ рд╢рд┐рд▓реНрдк рдлреНрд░реЗрдВрдХрд╕реНрдЯреАрди рдореЗрдВ рдмрджрд▓ рди рдЬрд╛рдП рдФрд░ рдПрдХ рд╢рд╛рдВрдд рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ рдкрд╣реБрдВрдЪ рдЬрд╛рдПред рдореВрд▓ рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрдХ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдореБрдЦреНрдп рд▓реВрдк рдореЗрдВ рдХрдмрд╛рдбрд╝ рдХреЗ рдвреЗрд░ рд╕реЗ рдЧреЗрдо рдЗрдВрдЬрди рдХреЛрдб рдХреИрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реБрдЖ рд╣реИ, рдЬреЛ рдХрд┐ рдПрдВрдЯрд┐рдЯреА рдХрдВрдкреЛрдиреЗрдВрдЯ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕реБрд╡рд┐рдЪрд╛рд░рд┐рдд, рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рд╣реИред рд▓реЗрдЦ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рд╣реИрдВ, рдЬреЛ рд▓рдЧрднрдЧ рд╕рднреА рд╕рдордп рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕реЗ рдлреЗрдВрдХ рдирд╣реАрдВ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрд╕рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛ рдХрд┐ рд▓реЗрдЦрдХ рдХреНрдпрд╛ рдмрджрд▓рд╛рд╡ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдкреВрд░реА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд▓реЗрдЦ рдореЗрд░реА рддрд░рд╣ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ "рд╕рд░рд▓" рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдмрдирд╛рдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдм рд╡реЗ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдЙрдирдХреЗ рдХреЛрдб рдХрд╛ рдкрддрд╛ рдХреИрд╕реЗ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рдПред

рдЕрдиреБрд╡рд╛рджрдХ рдХрд╛ рдиреЛрдЯ:
рдореИрдВ рдЕрдиреБрд╡рд╛рджрдХ рдирд╣реАрдВ рд╣реВрдВред рдореИрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЬреАрдн рд╕реЗ рдмрдВрдзрд╛ рд╣реБрдЖ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реВрдВ, рдЬреЛ рдЕрдкрдиреЗ рдЦреЗрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдВрд╡рд╛рд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдерд╛ рдФрд░ рдЗрд╕ рдкреИрдЯрд░реНрди рдкрд░ рдареЛрдХрд░ рдЦрд╛рдИ, рдпрд╣ рдЬрд╛рдирдХрд░ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдХрд┐ рд╣рдм рдкрд░ рдЗрд╕рдХрд╛ рдХреЛрдИ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рд╣реИ рдореИрдВрдиреЗ рдХрднреА рдмрдбрд╝реЗ рдЧреНрд░рдВрдереЛрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЬрд╛рдирдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рд░рд╣рд╕реНрдпреЛрджреНрдШрд╛рдЯрди рдерд╛ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд░реВрд╕реА рдореЗрдВ рдПрдХ рдЖрд╕рд╛рди рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдЕрдВрдЧреНрд░реЗрдЬреА рдкрд╛рда рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рдПрдХ рдРрд╕реА рдЪреБрдиреМрддреА рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдореИрдВ рдорд╛рдлреА рдорд╛рдБрдЧрддрд╛ рд╣реВрдБ рдЕрдЧрд░ рд▓реЗрдЦ рдЕрдирд╛рдбрд╝реА рдФрд░ рдЯреЗрдврд╝рд╛ рд▓рд┐рдЦрд╛ рд▓рдЧрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХреА :)


рдкрд┐рдЫрд▓реЗ рд╣рдлреНрддреЗ рдореИрдВрдиреЗ рдПрдХреНрд╢рдирд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЧреЗрдо рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдРрд╢ -рдПрдВрдЯрд┐рдЯреА рд╕рд┐рд╕реНрдЯрдо рдлреНрд░реЗрдорд╡рд░реНрдХ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдФрд░ рдХрдИ рд▓реЛрдЧреЛрдВ рдиреЗ рдореБрдЭрд╕реЗ рд╕рд╡рд╛рд▓ рдкреВрдЫрд╛ рдХрд┐ "рдПрдВрдЯрд┐рдЯреА рд╕рд┐рд╕реНрдЯрдо рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреНрдпрд╛ рд╣реИ?"ред рдпрд╣рд╛рдБ рдореЗрд░рд╛ рд▓рдВрдмрд╛ рдЬрд╡рд╛рдм рд╣реИред

рдЗрдХрд╛рдИ рд╕рд┐рд╕реНрдЯрдо рдкрд░рд┐рдЪрд┐рдд рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реЛ рд░рд╣реЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдПрдХрддрд╛ рдФрд░ рдПрдореНрдмрд░ 2, рдПрдореНрдмрд░, рдФрд░ рдореЗрд░реЗ рдЕрдкрдиреЗ рдРрд╢ рдЬреИрд╕реЗ рдХрдо-рдЬреНрдЮрд╛рдд рдПрдХреНрд╢рдирд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝реНрд░реЗрдорд╡рд░реНрдХред рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреЗ рдХрд╛рд░рдг рд╣реИрдВ: рдЦреЗрд▓ рдХреА рд╕рд░рд▓реАрдХреГрдд рд╡рд╛рд╕реНрддреБрдХрд▓рд╛, рдЬреЛ рдХреЛрдб рдореЗрдВ рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддреА рд╣реИ, рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред

рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ, рдореИрдВ рд▓рдЧрд╛рддрд╛рд░ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдкреБрд░рд╛рдиреЗ рдЬрдорд╛рдиреЗ рдХреЗ рдЧреЗрдо рд▓реВрдк рд╕реЗ рдПрдВрдЯрд┐рдЯреА рдЖрдзрд╛рд░рд┐рдд рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреИрд╕реЗ рдЙрднрд░рддреА рд╣реИред рдЗрд╕рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рдордп рд▓рдЧреЗрдЧрд╛ред рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг Actionscript рдкрд░ рд╣реЛрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдореИрдВ рдЗрд╕ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╕реНрд╡рдпрдВ рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред

рдЙрджрд╛рд╣рд░рдг


рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд░рд▓ рдЧреЗрдо рдХреНрд╖реБрджреНрд░рдЧреНрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрд╖реБрджреНрд░рдЧреНрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдХрдИ рдЪреАрдЬреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдмрдбрд╝реЗ рдЧреЗрдо рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ - рдПрдХ рд░реЗрдВрдбрд░ рд╕рд┐рд╕реНрдЯрдо, рднреМрддрд┐рдХреА, рдПрдЖрдИ, рдПрдХ рд╡рд╕реНрддреБ рдХрд╛ рдЦрд┐рд▓рд╛рдбрд╝реА рдирд┐рдпрдВрддреНрд░рдг, рдФрд░ рдЧреИрд░-рдирд┐рдпрдВрддреНрд░рд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯред

рдЦреЗрд▓ рдЪрдХреНрд░


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╣рдо рдЗрдХрд╛рдИ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЕрдЪреНрдЫрд╛ рдкреБрд░рд╛рдирд╛ рдЧреЗрдо рдЪрдХреНрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХреНрд╖реБрджреНрд░рдЧреНрд░рд╣реЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
function update( time:Number ):void { game.update( time ); spaceship.updateInputs( time ); for each( var flyingSaucer:FlyingSaucer in flyingSaucers ) { flyingSaucer.updateAI( time ); } spaceship.update( time ); for each( var flyingSaucer:FlyingSaucer in flyingSaucers ) { flyingSaucer.update( time ); } for each( var asteroid:Asteroid in asteroids ) { asteroid.update( time ); } for each( var bullet:Bullet in bullets ) { bullet.update( time ); } collisionManager.update( time ); spaceship.render(); for each( var flyingSaucer:FlyingSaucer in flyingSaucers ) { flyingSaucer.render(); } for each( var asteroid:Asteroid in asteroids ) { asteroid.render(); } for each( var bullet:Bullet in bullets ) { bullet.render(); } } 

рдЗрд╕ рдЧреЗрдо рд▓реВрдк рдХреЛ рдирд┐рдпрдорд┐рдд рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдорддреМрд░ рдкрд░ рдЦреЗрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 60 рдпрд╛ 30 рдмрд╛рд░ред рд▓реВрдк рдореЗрдВ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдХреНрд░рдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╡рд┐рднрд┐рдиреНрди рдЧреЗрдо рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рдмреАрдЪ рдЯрдХрд░рд╛рд╡ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЙрди рд╕рднреА рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╣рд░ рдлреНрд░реЗрдоред
рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдЧреЗрдо рд▓реВрдк рд╣реИ рдХреНрдпреЛрдВрдХрд┐:
1. рдЦреЗрд▓ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рд╕рд░рд▓ рд╣реИред
2. рдЦреЗрд▓ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд░рд╛рдЬреНрдп рд╣реИред
рдЕрддреАрдд рдореЗрдВ, рдореИрдВрдиреЗ рдХрдВрд╕реЛрд▓ рдЧреЗрдо рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛, рдЬрд╣рд╛рдВ рдЧреЗрдо рд▓реВрдк, рдПрдХрдорд╛рддреНрд░ рдлрд╝рдВрдХреНрд╢рди, рдЬрд┐рд╕рдореЗрдВ 3,000 рд╕реЗ рдЕрдзрд┐рдХ рд▓рд╛рдЗрдиреЗрдВ рд╢рд╛рдорд┐рд▓ рдереАрдВред рдпрд╣ рд╕реБрдВрджрд░ рдирд╣реАрдВ рдерд╛ рдФрд░ рдпрд╣ рдмреЗрд╡рдХреВрдлреА рдереАред рд▓реЗрдХрд┐рди рдпрд╣ рдЙрд╕реА рддрд░рд╣ рдерд╛ рдЬреИрд╕реЗ рдЦреЗрд▓ рдмрдирд╛рдП рдЧрдП рдФрд░ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рд░рд╣рдирд╛ рдерд╛ред
рдПрдВрдЯрд┐рдЯреА рд╕рд┐рд╕реНрдЯрдо рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдЧреЗрдо рд▓реВрдк рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рд╕реЗ рдЖрдпрд╛ рдерд╛ред рдпрд╣ рдЧреЗрдо рд▓реВрдк рдХреЛ рдЧреЗрдо рдХрд╛ рдореБрдЦреНрдп рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЧреЗрдо рд▓реВрдк рдХреЛ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдЖрдзреБрдирд┐рдХ рдЧреЗрдо рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ рдХрд┐рд╕реА рднреА рдЪреАрдЬ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдпрдВрддреНрд░рдХ рд╕реЗ рджреГрд╢реНрдп рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдпрд╣ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ


рдЗрд╕ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдкрд╣рд▓рд╛ рдХрджрдо рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпреЗ рдРрд╕реА рд╡рд╕реНрддреБрдПрдБ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрд░рдВрднреАрдХреГрдд, рдЕрджреНрдпрддрди рдФрд░ рдирд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 interface IProcess { function start():Boolean; function update( time:Number ):void; function end():void; } 

рдпрджрд┐ рд╣рдо рдЗрд╕реЗ рдХрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЦреЗрд▓ рдЪрдХреНрд░ рдХреЛ рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ, рдпрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдмрдВрдзрдХ рдмрдирд╛рдПрдВрдЧреЗред
 class ProcessManager { private var processes:PrioritisedList; public function addProcess( process:IProcess, priority:int ):Boolean { if( process.start() ) { processes.add( process, priority ); return true; } return false; } public function update( time:Number ):void { for each( var process:IProcess in processes ) { process.update( time ); } } public function removeProcess( process:IProcess ):void { process.end(); processes.remove( process ); } } 

рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдмрдВрдзрдХ рдХрд╛ рдПрдХ рд╕рд░рд▓реАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдо рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рд╣реА рдХреНрд░рдо рдореЗрдВ рдЕрджреНрдпрддрди рдХрд░реЗрдВ (рдЬреЛ рдХрд┐ рдРрдб рдкрджреНрдзрддрд┐ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЧрдИ рд╣реИ) рдФрд░ рд╣рдореЗрдВ рдЦреЗрд▓ рдЪрдХреНрд░ рдХреЗ рджреМрд░рд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рдкрд░ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд░рд▓реАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рд╡рд┐рдЪрд╛рд░ рдХреЛ рд╣реА рд╡реНрдпрдХреНрдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдЦреЗрд▓ рдЪрдХреНрд░ рдХреЛ рдХрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдорд╛рд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдмрдВрдзрдХ рдХреА рдЕрджреНрдпрддрди рдкрджреНрдзрддрд┐ рд╣рдорд╛рд░рд╛ рдирдпрд╛ рдЧреЗрдо рдЪрдХреНрд░ рд╣реИ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЦреЗрд▓ рдХрд╛ рдореВрд▓ рдмрди рд░рд╣реА рд╣реИрдВред

рд░реЗрдВрдбрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддрд┐рдкрд╛рджрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджреЗрдЦреЗрдВред рд╣рдо рдЧреЗрдо рд▓реВрдк рд╕реЗ рд░реЗрдВрдбрд░ рдХреЛрдб рдХреЛ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ:
 class RenderProcess implements IProcess { public function start() : Boolean { //    return true; } public function update( time:Number ):void { spaceship.render(); for each( var flyingSaucer:FlyingSaucer in flyingSaucers ) { flyingSaucer.render(); } for each( var asteroid:Asteroid in asteroids ) { asteroid.render(); } for each( var bullet:Bullet in bullets ) { bullet.render(); } } public function end() : void { //    } } 


рд╣рдо рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ


рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡реА рдирд╣реАрдВ рд╣реИред рд╣рдореЗрдВ рдЕрднреА рднреА рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдЧреЗрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рд╣реИред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рднреА рджреГрд╢реНрдп рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдерд╛, рддреЛ рд╣рдо рдмрд╣реБрдд рдХреБрдЫ рд╕рд░рд▓ рдХрд░ рд╕рдХрддреЗ рдереЗ
 interface IRenderable { function render(); } class RenderProcess implements IProcess { private var targets:Vector.<IRenderable>; public function start() : Boolean { //    return true; } public function update( time:Number ):void { for each( var target:IRenderable in targets ) { target.render(); } } public function end() : void { //    } } 

рддрдм рд╣рдорд╛рд░реЗ рдЕрдВрддрд░рд┐рдХреНрд╖ рдпрд╛рди рдХреЗ рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рдХреЛрдб рд╣реЛрдЧрд╛:
 class Spaceship implements IRenderable { public var view:DisplayObject; public var position:Point; public var rotation:Number; public function render():void { view.x = position.x; view.y = position.y; view.rotation = rotation; } } 

рдпрд╣ рдХреЛрдб рдлреНрд▓реИрд╢ рдбрд┐рд╕реНрдкреНрд▓реЗ рд╕реВрдЪрд┐рдпреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдпрджрд┐ рд╣рдо рдПрдХ рдмрдлрд░ рдпрд╛ рд╕реНрдЯреЗрдЬ 3 рдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЕрд▓рдЧ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╕рд┐рджреНрдзрд╛рдВрдд рд╕рдорд╛рди рд╣реЛрдВрдЧреЗред рдЗрд╕реЗ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рдЪрд┐рддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╕реНрдерд┐рддрд┐ рдФрд░ рд░реЛрдЯреЗрд╢рди рдХреАред рдФрд░ рд░реЗрдВрдбрд░ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИред

рд╣рдо рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдФрд░ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬрд╣рд╛рдЬ рдХреЛрдб рдореЗрдВ рдХреБрдЫ рднреА рдЕрдиреЛрдЦрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рд╕рднреА рдХреЛрдб рд╕рднреА рджреГрд╢реНрдпрдорд╛рди рд╡рд╕реНрддреБрдУрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рдХрд░рддреА рд╣реИ рд╡рд╣ рд╣реИ рдбрд┐рд╕реНрдкреНрд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯ, рд╡реНрдпреВ рдкреНрд░реЙрдкрд░реНрдЯреА рд╕реЗ рдЬреБрдбрд╝реА, рд╕рд╛рде рд╣реА рд░реЛрдЯреЗрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдХреЛрдгред рдЖрдЗрдП рдЗрд╕реЗ рдПрдХ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдореЗрдВ рд▓рдкреЗрдЯреЗрдВ рдФрд░ рд╡рд┐рд░рд╛рд╕рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
 class Renderable implements IRenderable { public var view:DisplayObject; public var position:Point; public var rotation:Number; public function render():void { view.x = position.x; view.y = position.y; view.rotation = rotation; } } class Spaceship extends Renderable { } 

рдирд┐рд╕реНрд╕рдВрджреЗрд╣, рдЖрд░реЗрдЦрд┐рдд рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рд╡рд╕реНрддреБрдПрдБ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВрдЧреА рдФрд░ рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдПрдХ рдкрджрд╛рдиреБрдХреНрд░рдо рдорд┐рд▓реЗрдЧрд╛:
рдЫрд╡рд┐

рдЖрдВрджреЛрд▓рди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛


рдЕрдЧрд▓реЗ рдЪрд░рдг рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдПрдХ рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдФрд░ рдЙрд╕ рдХрдХреНрд╖рд╛ рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╡рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП рдЖрдВрджреЛрд▓рди рдХреА рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдЬреЛ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреА рд╣реИ
 interface IMoveable { function move( time:Number ); } class MoveProcess implements IProcess { private var targets:Vector.<IMoveable>; public function start():Boolean { return true; } public function update( time:Number ):void { for each( var target:IMoveable in targets ) { target.move( time ); } } public function end():void { } } class Moveable implements IMoveable { public var position:Point; public var rotation:Number; public var velocity:Point; public var angularVelocity:Number; public function move( time:Number ):void { position.x += velocity.x * time; position.y += velocity.y * time; rotation += angularVelocity * time; } } class Spaceship extends Moveable { } 


рдПрдХрд╛рдзрд┐рдХ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо


рдпрд╣ рд╕рдм рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдЬрд╣рд╛рдЬ рдЖрдЧреЗ рдмрдврд╝реЗ рдФрд░ рд░реЗрдВрдбрд░ рдХрд░реЗ, рд▓реЗрдХрд┐рди рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬ рдорд▓реНрдЯреАрдкрд▓ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреА рд╣реИрдВред рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрди рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЬреЛ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░реЗрдВрдЧреЗ, рдЬрдм рдЬрдВрдЧрдо рд╡рд░реНрдЧ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдФрд░ рд░реЛрдЯреЗрд╢рди рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╡рд░реНрдЧ рдХреЗ рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕рдорд╛рдзрд╛рди рдПрдХ рд╡рд┐рд░рд╛рд╕рдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЬрдВрдЧрдо Renderable рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИред
 class Moveable extends Renderable implements IMoveable { public var velocity:Point; public var angularVelocity:Number; public function move( time:Number ):void { position.x += velocity.x * time; position.y += velocity.y * time; rotation += angularVelocity * time; } } class Spaceship extends Moveable { } 

рдЕрдм рд╣рдорд╛рд░рд╛ рд╕реНрдкреЗрд╕рд╢рд┐рдк рдореВрд╡рд┐рдВрдЧ рдФрд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рджреЛрдиреЛрдВ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рд╣рдо рдЕрдиреНрдп рдЧреЗрдо рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдкрд░ рд╕рдорд╛рди рд╕рд┐рджреНрдзрд╛рдВрдд рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдкрджрд╛рдиреБрдХреНрд░рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЫрд╡рд┐

рд╣рдо рд╕реНрдереИрддрд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред
рдЫрд╡рд┐

рдЬрдВрдЧрдо рд▓реЗрдХрд┐рди рднрд░реЛрд╕реЗрдордВрдж рдирд╣реАрдВ


рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдЪрд▓рддреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЦреАрдВрдЪрд╛ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрджреГрд╢реНрдп рдЧреЗрдо рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕? рдпрд╣рд╛рдВ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдкрджрд╛рдиреБрдХреНрд░рдо рдЯреВрдЯ рдЬрд╛рддреА рд╣реИ рдФрд░ рд╣рдореЗрдВ рдЬрдВрдЧрдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдХрд┐ рд░реЗрдВрдбрд░реЗрдмрд▓ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓реА рд╣реИред
 class InvisibleMoveable implements IMoveable { public var position:Point; public var rotation:Number; public var velocity:Point; public var angularVelocity:Number; public function move( time:Number ):void { position.x += velocity.x * time; position.y += velocity.y * time; rotation += angularVelocity * time; } } 

рдЫрд╡рд┐
рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЦреЗрд▓ рдореЗрдВ, рдпрд╣ рдЧрдВрджрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рдмрдВрдзрдиреАрдп рд╣реИ, рдФрд░ рдЬрдЯрд┐рд▓ рдЦреЗрд▓реЛрдВ рдореЗрдВ, рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рд╕реЗ рдмрд╛рдБрдзрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд░рд╛рд╕рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХреЛ рдЕрд╕рд╣рдиреАрдп рдмрдирд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЬрд▓реНрдж рд╣реА рдЖрдкрдХреЛ рдЦреЗрд▓ рдореЗрдВ рдРрд╕реА рдЪреАрдЬреЗрдВ рдорд┐рд▓реЗрдВрдЧреА рдЬреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдЬреИрд╕реЗ рдКрдкрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЧрдПред

рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдкрд░ рд░рдЪрдирд╛ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВред


рдПрдХ рдкреБрд░рд╛рдирд╛ рдУрдУрдкреА рд╕рд┐рджреНрдзрд╛рдВрдд рд╣реИ: рд╡рд┐рд░рд╛рд╕рдд рдкрд░ рд░рдЪрдирд╛ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВ ред рдЗрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдЖрдк рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рднреНрд░рдо рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдореЗрдВ рдЕрднреА рднреА рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдФрд░ рдЬрдВрдЧрдо рд╡рд░реНрдЧреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдВрддрд░рд┐рдХреНрд╖ рдпрд╛рди рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рджреЗрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдПрдХ рдЬрд╣рд╛рдЬ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВрдЧреЗ, рдЬрд┐рд╕рдореЗрдВ рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдВрдЧреЗред
 class Renderable implements IRenderable { public var view:DisplayObject; public var position:Point; public var rotation:Number; public function render():void { view.x = position.x; view.y = position.y; view.rotation = rotation; } } class Moveable implements IMoveable { public var position:Point; public var rotation:Number; public var velocity:Point; public var angularVelocity:Number; public function move( time:Number ):void { position.x += velocity.x * time; position.y += velocity.y * time; rotation += angularVelocity * time; } } class Spaceship { public var renderData:IRenderable; public var moveData:IMoveable; } 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рд╡рд┐рднрд┐рдиреНрди рд╡реНрдпрд╡рд╣рд╛рд░реЛрдВ рдХреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рдореБрджреНрджреЛрдВ рдХреЗред
рдЫрд╡рд┐
рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдИ рдЧрдИ рдпреЗ рд╡рд╕реНрддреБрдПрдВ: рд╕реНрдЯреЗрдЯрд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ, рд╕реНрдкреЗрд╕рд╢рд┐рдк, рдлреНрд▓рд╛рдЗрдВрдЧ рд╕реЙрд╕рд░, рдПрд╕реНрдЯреЗрд░реЙрдпрдб рдФрд░ рдлреЛрд░реНрд╕ рдлреАрд▓реНрдб - рд╕рд╛рдореВрд╣рд┐рдХ рд░реВрдк рд╕реЗ рдПрдВрдЯрд┐рдЯреАрдЬ рдХрд╣рд▓рд╛рддреА рд╣реИрдВред
рд╣рдорд╛рд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдирд╣реАрдВ рдмрджрд▓рддреАрдВред
 interface IRenderable { function render(); } class RenderProcess implements IProcess { private var targets:Vector.<IRenderable>; public function update(time:Number):void { for each(var target:IRenderable in targets) { target.render(); } } } interface IMoveable { function move(); } class MoveProcess implements IProcess { private var targets:Vector.<IMoveable>; public function update(time:Number):void { for each(var target:IMoveable in targets) { target.move( time ); } } } 

рд▓реЗрдХрд┐рди рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХ рдЬрд╣рд╛рдЬ рд╡рд╕реНрддреБ рдирд╣реАрдВ рдЬреЛрдбрд╝реЗрдВрдЧреЗ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╣рдо рдЗрд╕рдХреЗ рдШрдЯрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рдорд┐рд▓рддрд╛ рд╣реИ:
 public function createSpaceship():Spaceship { var spaceship:Spaceship = new Spaceship(); ... renderProcess.addItem( spaceship.renderData ); moveProcess.addItem( spaceship.moveData ); ... return spaceship; } 

рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдпрд╣ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдпрд╛ рд╕реНрд╡-рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рдХреА рдЧрдбрд╝рдмрдбрд╝реА рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рднрд┐рдиреНрди рдЦреЗрд▓ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдорд░реНрдерди рдХреЛ рдорд┐рд▓рд╛рдиреЗ рдФрд░ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ?


рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╡рд░реНрдЧ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдФрд░ рдШреБрдорд╛рд╡ рдХреЗ рдЧреБрдгреЛрдВ рдореЗрдВ рдПрдХ рд╣реА рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ рдХрд┐ рдореВрд╡реЗрдмрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд░реЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐, рдЪреВрдВрдХрд┐ рдореВрд╡ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдкрдиреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рд░реЗрдВрдбрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЙрдиреНрд╣реЗрдВ рдЦреАрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
 class Renderable implements IRenderable { public var view:DisplayObject; public var position:Point; public var rotation:Number; public function render():void { view.x = position.x; view.y = position.y; view.rotation = rotation; } } class Moveable implements IMoveable { public var position:Point; public var rotation:Number; public var velocity:Point; public var angularVelocity:Number; public function move( time:Number ):void { position.x += velocity.x * time; position.y += velocity.y * time; rotation += angularVelocity * time; } } class Spaceship { public var renderData:IRenderable; public var moveData:IMoveable; } 

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рд╡рд╕реНрддреБрдПрдБ рдЗрди рдЧреБрдгреЛрдВ рдХреЗ рд╕рдорд╛рди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рджреЗрдЦреЗрдВред ActionScript рдореЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпреЗ рдЧреБрдг рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдореВрд▓реНрдп рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рд╣рдо рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдПрдХ рдФрд░ рд╕реЗрдЯ рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рдШрдЯрдХ рдХрд╣рддреЗ рд╣реИрдВред рдпреЗ рдШрдЯрдХ рд╕рдВрдкрддреНрддрд┐ рдореВрд▓реНрдпреЛрдВ рдкрд░ рдПрдХ рдЖрд╡рд░рдг рд╣реИрдВ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
 class PositionComponent { public var x:Number; public var y:Number; public var rotation:Number; } class VelocityComponent { public var velocityX:Number; public var velocityY:Number; public var angularVelocity:Number; } class DisplayComponent { public var view:DisplayObject; } class Renderable implements IRenderable { public var display:DisplayComponent; public var position:PositionComponent; public function render():void { display.view.x = position.x; display.view.y = position.y; display.view.rotation = position.rotation; } } class Moveable implements IMoveable { public var position:PositionComponent; public var velocity:VelocityComponent; public function move( time:Number ):void { position.x += velocity.velocityX * time; position.y += velocity.velocityY * time; position.rotation += velocity.angularVelocity * time; } } 

рдЬрдм рд╣рдо рдЕрдкрдирд╛ рдЕрдВрддрд░рд┐рдХреНрд╖ рдпрд╛рди рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХрд┐ рдЬрдВрдЧрдо рдФрд░ рднрд░реЛрд╕реЗрдордВрдж рд╡рд╕реНрддреБрдПрдВ рд╕реНрдерд┐рддрд┐.рдХреЙрдо рдХреЗ рд╕рдорд╛рди рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЗрдЦреЗрдВред
 class Spaceship { public function Spaceship() { moveData = new Moveable(); renderData = new Renderable(); moveData.position = new PositionComponent(); moveData.velocity = new VelocityComponent(); renderData.position = moveData.position; renderData.display = new DisplayComponent(); } } 

рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдЕрднреА рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдФрд░ рдпрд╣ рдЖрд░рд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рдЬрдЧрд╣ рд╣реИред


рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рднрд╛рдЬрди рд╣реИред рдЧреЗрдо рд▓реВрдк "рдЯреНрд╡рд┐рд╕реНрдЯ" рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдк рдЙрдирдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ (рдкреНрд░рдХреНрд░рд┐рдпрд╛) рдЗрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рддрд░реАрдХреЗ рдХрд╣рддреЗ рд╣реИрдВред рдРрд╕реА рд╡рд╕реНрддреБрдПрдВ рдЕрдкрдиреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИрдВред рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЗрди рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рдВрдпреЛрдЬрди рдЦреЗрд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмреАрдЪ рдЬрдЯрд┐рд▓ рдмрд╛рддрдЪреАрдд рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рд░рд╣рддреА рд╣реИред
рдпрд╣ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдЦреЗрд▓ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдХрдИ рдЗрдХрд╛рдИ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИред рдпрд╣ рдУрдУрдкреА рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреБрдЫ рдФрд░ рднреА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдкрд╛рдЧрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЧреБрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реИрдХреНрдЯрд┐рд╕ рд╕реЗ рдмрдЪрдирд╛


рд╡рд░реНрддрдорд╛рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдРрд╕реЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХреЗ рдПрдиреНрдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдФрд░ рдкреГрдердХреНрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ - рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕реЗ IRenderable рдФрд░ IMovable рдХрд░реАрдмреА рдореВрд▓реНрдп рдФрд░ рддрд░реНрдХ, рдЧреЗрдо рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд╣рд░ рдлреНрд░реЗрдо рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ред рдФрд░ рд╕рдВрд░рдЪрдирд╛ - рдПрдХ рд╕реНрдкреЗрд╕рд╢рд┐рдк рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ IRenderable рдФрд░ IMovable рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдорд┐рд▓рд╛рдХрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдШрдЯрдХ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдореЗрдВ рдпрдХреАрди рд╣реИ рдХрд┐, рдЬрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рдорд╛рди рдбреЗрдЯрд╛ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╕реБрд▓рдн рд╣реИрдВред

рд╡рд╕реНрддреБрдУрдВ рдХреА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЕрдЧрд▓рд╛ рдХрджрдо рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░ рдореЗрдВ рд╕рд╣рдЬ рд░реВрдк рд╕реЗ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ рдФрд░ рд░реБрдЭрд╛рдиреЛрдВ рдХреЛ рдирд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рд░реЗрдВрдбрд░реЗрдмрд▓ рдФрд░ рдореВрд╡реЗрдмрд▓ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕реВрдЪрдирд╛ рдФрд░ рддрд░реНрдХ рдХреЗ рдЕрддрд┐рдХреНрд░рдордг рдХреЛ рддреЛрдбрд╝рддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдо рдЗрди рд╡рд░реНрдЧреЛрдВ рд╕реЗ рддрд░реНрдХ рдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред

рддреЛ рдпрд╣ рд╣реИ:
 interface IRenderable { function render(); } class Renderable implements IRenderable { public var display:DisplayComponent; public var position:PositionComponent; public function render():void { display.view.x = position.x; display.view.y = position.y; display.view.rotation = position.rotation; } } class RenderProcess implements IProcess { private var targets:Vector.<IRenderable>; public function update( time:Number ):void { for each( var target:IRenderable in targets ) { target.render(); } } } 

рдпрд╣ рдмрди рдЬрд╛рдПрдЧрд╛:
 class RenderData { public var display:DisplayComponent; public var position:PositionComponent; } class RenderProcess implements IProcess { private var targets:Vector.<RenderData>; public function update( time:Number ):void { for each( var target:RenderData in targets ) { target.display.view.x = target.position.x; target.display.view.y = target.position.y; target.display.view.rotation = target.position.rotation; } } } 


рдФрд░ рдпрд╣:
 interface IMoveable { function move( time:Number ); } class Moveable implements IMoveable { public var position:PositionComponent; public var velocity:VelocityComponent; public function move( time:Number ):void { position.x += velocity.velocityX * time; position.y += velocity.velocityY * time; position.rotation += velocity.angularVelocity * time; } } class MoveProcess implements IProcess { private var targets:Vector.<IMoveable>; public function move( time:Number ):void { for each( var target:Moveable in targets ) { target.move( time ); } } } 

рдпрд╣ рдмрди рдЬрд╛рдПрдЧрд╛:
 class MoveData { public var position:PositionComponent; public var velocity:VelocityComponent; } class MoveProcess implements IProcess { private var targets:Vector.<MoveData>; public function move( time:Number ):void { for each( var target:MoveData in targets ) { target.position.x += target.velocity.velocityX * time; target.position.y += target.velocity.velocityY * time; target.position.rotation += target.velocity.angularVelocity * time; } } } 


рдпрд╣ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдореБрдЭ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░реЗрдВред рд╣рдореЗрдВ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдЕрдм рдХреБрдЫ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд░ рд░рд╣реА рд╣реИрдВ - рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдХрд╛рдо рдХреЛ IRenderable рдпрд╛ IMovable рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдкреНрд░рддреНрдпрд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╡рд╣ рд╕реНрд╡рдпрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред

рдкрд╣рд▓рд╛ рд╕реНрдкрд╖реНрдЯ рдирд┐рд╖реНрдХрд░реНрд╖ рдпрд╣ рд╣реИ рдХрд┐ рд░реЗрдВрдбрд░рдкреНрд░реЛрд╕реЗрд╕ рдореЗрдВ рдЕрдм рд░реЗрдВрдбрд░ рдХреЛрдб рдХреЗ рдмрд╛рдж рд╕реЗ рд╕рднреА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╡рд┐рдзрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЗрддрдирд╛ рд╣реА рдирд╣реАрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рджреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, RenderMovieClip рдФрд░ RenderBitmap, рдФрд░ рд╡реЗ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрдЯреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдХреЛрдб рдХреЗ рд▓рдЪреАрд▓реЗрдкрди рдореЗрдВ рдирд╣реАрдВ рдЦреЛрдПрдВрдЧреЗред

рд╣рдореЗрдВ рдЬреЛ рдорд┐рд▓рддрд╛ рд╣реИ, рд╡рд╣ рдПрдХ рдЕрдзрд┐рдХ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдкреГрдердХреНрдХрд░рдг рдФрд░ рд╕рд░рд▓ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдХрд╛рдлреА рд╣рдж рддрдХ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдПрдХ рд╕рд╡рд╛рд▓ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдЧреАред

рдХреНрдпрд╛ рд╣рдореЗрдВ рдореВрд▓реНрдп рд╡рд░реНрдЧреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?


рдлрд┐рд▓рд╣рд╛рд▓, рд╣рдорд╛рд░рд╛ рд╕рд╛рд░
 class Spaceship { public var moveData:MoveData; public var renderData:RenderData; } 


рджреЛ рд╡рд░реНрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
 class MoveData { public var position:PositionComponent; public var velocity:VelocityComponent; } class RenderData { public var display:DisplayComponent; public var position:PositionComponent; } 


рдЗрди рдбреЗрдЯрд╛ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рддреАрди рдШрдЯрдХ рд╣реЛрддреЗ рд╣реИрдВ:
 class PositionComponent { public var x:Number; public var y:Number; public var rotation:Number; } class VelocityComponent { public var velocityX:Number; public var velocityY:Number; public var angularVelocity:Number; } class DisplayComponent { public var view:DisplayObject; } 


рдФрд░ рдпреЗ рдореВрд▓реНрдп рд╡рд░реНрдЧ рджреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:
 class MoveProcess implements IProcess { private var targets:Vector.<MoveData>; public function move( time:Number ):void { for each( var target:MoveData in targets ) { target.position.x += target.velocity.velocityX * time; target.position.y += target.velocity.velocityY * time; target.position.rotation += target.velocity.angularVelocity * time; } } } class RenderProcess implements IProcess { private var targets:Vector.<RenderData>; public function update( time:Number ):void { for each( var target:RenderData in targets ) { target.display.view.x = target.position.x; target.display.view.y = target.position.y; target.display.view.rotation = target.position.rotation; } } } 


рд▓реЗрдХрд┐рди рдПрдХ рдЗрдХрд╛рдИ рдХреЛ рдбреЗрдЯрд╛ рд╡рд░реНрдЧреЛрдВ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рд╕рднреА рдШрдЯрдХреЛрдВ рдореЗрдВ рдЗрдХрд╛рдИ рдХреА рд╕реНрдерд┐рддрд┐ рд╣реЛрддреА рд╣реИред рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХрдХреНрд╖рд╛рдПрдВ рдореМрдЬреВрдж рд╣реИрдВред рд╣рдо рдХреЛрдб рдХреЛ рд░рд┐рдлрд▓реЗрдХреНрдЯрд░ рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рд╕реНрдкреЗрд╕рд╢рд┐рдк рдХреНрд▓рд╛рд╕ рдореЗрдВ рдбреЗрдЯрд╛ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдмрдЬрд╛рдп рд╕реНрд╡рдпрдВ рдШрдЯрдХ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВред
 class Spaceship { public var position:PositionComponent; public var velocity:VelocityComponent; public var display:DisplayComponent; } class PositionComponent { public var x:Number; public var y:Number; public var rotation:Number; } class VelocityComponent { public var velocityX:Number; public var velocityY:Number; public var angularVelocity:Number; } class DisplayComponent { public var view:DisplayObject; } 


рдПрдХ рд╕реНрдкреЗрд╕рд╢рд┐рдк рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕реВрдЪрдирд╛ рдХрдХреНрд╖рд╛рдУрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдФрд░ рдХрдВрдкреЛрдЬрд┐рдЯ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдХрд╛рдИ рдХреА рд╕рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдХрд┐ рдХреМрди рд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИред рдЬрд╣рд╛рдЬ рдореЗрдВ рдЕрдм рдРрд╕реЗ рдШрдЯрдХ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрди рдШрдЯрдХреЛрдВ рдХреЛ рдЕрдиреНрдп рдореВрд▓реНрдп рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрдм рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╣реИред

рд╕рд┐рд╕реНрдЯрдо рдФрд░ рдиреЛрдбреНрд╕ред


рдЗрдХрд╛рдИ рдкреНрд░рдгрд╛рд▓реА рдврд╛рдВрдЪреЗ рдХреЗ рдореВрд▓ рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╣рд┐рд╕реНрд╕рд╛ (рдЬрд┐рд╕реЗ рд╣рдо рдПрдХ рдорд┐рдирдЯ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ) рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдЗрди рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдЧрд╛ред рдЗрд╕ рд╕рд░рд▓реАрдХреГрдд рд╕рдВрджрд░реНрдн рдореЗрдВ, рдореВрд▓реНрдп рдХрдХреНрд╖рд╛рдПрдВ, рдиреЛрдбреНрд╕ рдпрд╛ рдкрддреНрддрд┐рдпреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВ рд╣реЛрдЧреА, рд╕рдВрдЧреНрд░рд╣ (рд╕рд░рдгрд┐рдпреЛрдВ, рд▓рд┐рдВрдХ рдХреА рдЧрдИ рд╕реВрдЪрд┐рдпреЛрдВ, рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп) рдореЗрдВ рдЬреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред рддреЛ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдирд╛рдо рджреЗрддреЗ рд╣реИрдВред
 class MoveNode { public var position:PositionComponent; public var velocity:VelocityComponent; } class RenderNode { public var display:DisplayComponent; public var position:PositionComponent; } 


рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рд╕реНрд╡рдпрдВ рдирд╣реАрдВ рдмрджрд▓реЗрдВрдЧреА, рд▓реЗрдХрд┐рди, рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдирд╛рдордХрд░рдг рдирд┐рдпрдореЛрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдП, рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдмрджрд▓ рджреЗрдВрдЧреЗред
 class MoveSystem implements ISystem { private var targets:Vector.<MoveNode>; public function update( time:Number ):void { for each( var target:MoveNode in targets ) { target.position.x += target.velocity.velocityX * time; target.position.y += target.velocity.velocityY * time; target.position.rotation += target.velocity.angularVelocity * time; } } } class RenderSystem implements ISystem { private var targets:Vector.<RenderNode>; public function update( time:Number ):void { for each( var target:RenderNode in targets ) { target.display.view.x = target.position.x; target.display.view.y = target.position.y; target.display.view.rotation = target.position.rotation; } } } interface ISystem { function update( time:Number ):void; } 


рдФрд░ рд╕рд╛рд░ рдХреНрдпрд╛ рд╣реИ?


рдПрдХ рдЖрдЦрд┐рд░реА рдмрджрд▓рд╛рд╡ - рд╕реНрдкреЗрд╕рд╢рд┐рдк рдХреНрд▓рд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рдХрдВрдЯреЗрдирд░ рд╣реИред рддреЛ рдмрд╕ рдЗрд╕реЗ рдЗрдХрд╛рдИ рдХрд╣рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдШрдЯрдХреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрддреЗ рд╣реИрдВред рд╣рдо рдЗрди рдШрдЯрдХреЛрдВ рдХреЛ рдЙрдирдХреЗ рд╡рд░реНрдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдФрд░ рдЕрдм рдореБрдЭреЗ рдЗрд╕реЗ рдкреНрд▓рд╕рд╕ - рд▓рдЧрднрдЧ рдЯреНрд░рд╛рдВрд╕рд▓реЗрдЯрд░ рдкрд░ рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ)ред
 class Entity { private var components : Dictionary; public function add( component:Object ):void { var componentClass : Class = component.constructor; components[ componentClass ] = component' } public function remove( componentClass:Class ):void { delete components[ componentClass ]; } public function get( componentClass:Class ):Object { return components[ componentClass ]; } } 


рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрдкрдирд╛ рд╕реНрдкреЗрд╕рд╢рд┐рдк рдмрдирд╛рдПрдВрдЧреЗ:
 public function createSpaceship():void { var spaceship:Entity = new Entity(); var position:PositionComponent = new PositionComponent(); position.x = Stage.stageWidth / 2; position.y = Stage.stageHeight / 2; position.rotation = 0; spaceship.add( position ); var display:DisplayComponent = new DisplayComponent(); display.view = new SpaceshipImage(); spaceship.add( display ); engine.add( spaceship ); } 


рдЗрдВрдЬрди рдХреЛрд░ рдХреНрд▓рд╛рд╕


рд╣рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдореИрдиреЗрдЬрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рднреВрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░реЛрд╕реЗрд╕ рдореИрдиреЗрдЬрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛:
 class SystemManager { private var systems:PrioritisedList; public function addSystem( system:ISystem, priority:int ):void { systems.add( system, priority ); system.start(); } public function update( time:Number ):void { for each( var system:ISystem in systemes ) { system.update( time ); } } public function removeSystem( system:ISystem ):void { system.end(); systems.remove( system ); } } 


рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╣рдорд╛рд░реЗ рдврд╛рдВрдЪреЗ рдХрд╛ рджрд┐рд▓ рдмрдиреЗрдЧрд╛ред рд╣рдо рдЗрд╕рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдиреЛрдбреНрд╕ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЙрдкрд░реЛрдХреНрдд рдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

рдПрдВрдЯрд┐рдЯреА рдХреЗрд╡рд▓ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕реМрджрд╛ рдХрд░рддреА рд╣реИрдВ, рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗрд╡рд▓ рдиреЛрдбреНрд╕ рдХреЗ рд╕рд╛рде рд╕реМрджрд╛ рдХрд░рддреЗ рд╣реИрдВредрдФрд░, рд╕рдВрд╕реНрдерд╛рдУрдВ рдФрд░ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд╣рдорд╛рд░реЗ рдврд╛рдВрдЪреЗ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдореБрдЭреЗ рдЧреЛрд▓реА рдорд╛рд░ рджреЗрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕реЗ рдмреЗрд╣рддрд░ рдЕрдиреБрд╡рд╛рдж рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ - рдЕрдиреБрд╡рд╛рджрдХ рдХрд╛ рдиреЛрдЯ), рд╣рдореЗрдВ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЛ рд╕рд╛рдВрдХреЗрддрд┐рдХ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдиреЛрдбреНрд╕ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдШрдЯрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдпрд╛ рдирд┐рдХрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рд╡реЗ рдмрджрд▓рддреЗ рд╣реИрдВред рдЪреВрдБрдХрд┐ рдЗрд╕ рдХреЛрдб рдХрд╛ рдЯреБрдХрдбрд╝рд╛ рд╕рдВрд╕реНрдерд╛рдУрдВ рдФрд░ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рджреЛрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реИ, рд╣рдо рдЗрд╕реЗ рдЦреЗрд▓ рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рд░рдЦреЗрдВрдЧреЗред рдореИрдВ рдЗрд╕реЗ рдЗрдВрдЬрди рд╡рд░реНрдЧ рдХрд╣рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рдореИрдиреЗрдЬрд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рд╣реИред

рдкреНрд░рддреНрдпреЗрдХ рдЗрдХрд╛рдИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЗрдВрдЬрди рдХреНрд▓рд╛рд╕ рд╕реЗ рддрдм рдЬреЛрдбрд╝рд╛ рдФрд░ рд╣рдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдФрд░ рд╕рдорд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдЗрдВрдЬрди рдШрдЯрдХреЛрдВ рдФрд░ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрди рдиреЛрдбреНрд╕ рдХреЛ рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реБрдП рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдиреЛрдб рдмрдирд╛рддрд╛ рдФрд░ рд╣рдЯрд╛рддрд╛ рд╣реИред рдЗрдВрдЬрди рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдиреЛрдбреНрд╕ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдХреА рдЙрдиреНрд╣реЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
 public class Engine { private var entities:EntityList; private var systems:SystemList; private var nodeLists:Dictionary; public function addEntity( entity:Entity ):void { entities.add( entity ); //            //         //        } public function removeEntity( entity:Entity ):void { //  ,    //       entities.remove( entity ); } public function addSystem( system:System, priority:int ):void { systems.add( system, priority ); system.start(); } public function removeSystem( system:System ):void { system.end(); systems.remove( system ); } public function getNodeList( nodeClass:Class ):NodeList { var nodes:NodeList = new NodeList(); nodeLists[ nodeClass ] = nodes; // create the nodes from the current set of entities // and populate the node list return nodes; } public function update( time:Number ):void { for each( var system:ISystem in systemes ) { system.update( time ); } } } 


рдЫрд╡рд┐

рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рдореЗрд░рд╛ рдРрд╢ рдПрдВрдЯрд┐рдЯреА рд╕рд┐рд╕реНрдЯрдо рдлреНрд░реЗрдорд╡рд░реНрдХ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдЧреЗрдо рдПрд╕реНрдЯрд░реЙрдпрдб рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЗрдЦреЗрдВ ред

рдирд┐рд╖реНрдХрд░реНрд╖


рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЦреЗрд▓ рдЪрдХреНрд░ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдХреЗ рдХрд╛рд░рдг рдПрдВрдЯрд┐рдЯреА рд╕рд┐рд╕реНрдЯрдо рдЖрдпрд╛ред рдпрд╣ рдПрдХ рдЗрдХрд╛рдИ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЦреЗрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдЬреЛ рдЦреЗрд▓ рдореЗрдВ рд░рд╛рдЬреНрдпреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╣рд░ рдлреНрд░реЗрдо рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдпрд╣ рдЧреЗрдо рдЪрдХреНрд░ рд╣реИред рдПрдВрдЯрд┐рдЯреАрдЬрд╝ рдШрдЯрдХреЛрдВ рд╕реЗ рдмрдиреЗ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗрд╡рд▓ рдЙрди рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдЙрдирдХреЗ (рд╕рд┐рд╕реНрдЯрдо) рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдШрдЯрдХ рд╣реЛрддреЗ рд╣реИрдВред рдЗрдВрдЬрди рд╕рд┐рд╕реНрдЯрдо рдФрд░ рдПрдВрдЯрд┐рдЯреАрдЬ рдкрд░ рдирдЬрд░ рд░рдЦрддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЙрди рдПрдВрдЯрд┐рдЯреАрдЬ рдХреЗ рдХрд▓реЗрдХреНрд╢рди рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рдЬрд░реВрд░реА рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рд╣реЛрддреЗ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рд┐рд╕реНрдЯрдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд╕реНрдерд╛рдУрдВ рд╕реЗ рдирд╣реАрдВ рдирд┐рдкрдЯрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЙрди рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рдирдХреА рд╡реЗ рд░рдЪрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдкрд╖реНрдЯрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд┐рд╕реНрдЯрдо рдиреЛрдбреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдШрдЯрдХ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдпреЗ рд╕рднреА рдШрдЯрдХ рдПрдХ рд╣реА рдЗрдХрд╛рдИ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВред

рдПрдВрдЯрд┐рдЯреА рд╕рд┐рд╕реНрдЯрдо рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд┐рд╕реА рднреА рдЗрдХрд╛рдИ рд╡рд░реНрдЧреЛрдВ рдпрд╛ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдмрд┐рдирд╛, рдЗрд╕ рддрд░рд╣ рдХреЗ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рдврд╛рдВрдЪрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕реНрдерд╛рдУрдВ рдФрд░ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдХрд░ рдЕрдкрдиреЗ рдЦреЗрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВред

рдЕрдиреБрд╡рд╛рджрдХ рдХрд╛ рдиреЛрдЯ:
- - Entity Component System C++? , . , - Artemis Entity System Framework, , .
:
, :)


рдореВрд▓

Source: https://habr.com/ru/post/In197920/


All Articles