ู†ู‚ู„ ู„ุนุจุฉ ุฅุทู„ุงู‚ ู†ุงุฑ ู‚ุฏูŠู…ุฉ ุฅู„ู‰ JavaScript ุนู„ู‰ ุฑูƒุจู†ุง

ู‡ู†ุงูƒ ู„ุนุจุฉ ู‚ุฏูŠู…ุฉ LaserAge ู…ูƒุชูˆุจุฉ ุจุงู„ูู„ุงุด (ุนู„ู‰ Macromedia Flash 4 ู‚ุฏูŠู… ุฌุฏู‹ุง) ูˆุชุนู…ู„ ูู‚ุท ู…ุน Windows. ุนู†ุฏู…ุง ูƒู†ุช ุทูู„ุงู‹ ุŒ ุฃุนุฌุจุชู†ูŠ ุญู‚ู‹ุง ุŒ ู„ุฐู„ูƒ ู‚ุฑุฑุช ุฃู† ุฃู‚ูˆู… ุจู†ู‚ู„ู‡ุง ุฅู„ู‰ ุงู„ุฑูˆุญ ุญุชู‰ ุฃุชู…ูƒู† ู…ู† ุงู„ู„ุนุจ ู…ู† ุงู„ู…ุชุตูุญ ู…ู† ุฌู…ูŠุน ุงู„ุฃุฌู‡ุฒุฉ.



ุงู„ู‡ุฏู ู…ู† ุงู„ู„ุนุจุฉ ู‡ูˆ ุชุฏู…ูŠุฑ ุงู„ุฎุตูˆู… ุจูˆุงุณุทุฉ ุณููŠู†ุฉ ุงู„ูุถุงุก ุงู„ุฎุงุตุฉ ุจูƒ ุนู„ู‰ ู…ุณุชูˆูŠุงุช ู…ุฎุชู„ูุฉ ูˆุงู„ุญุตูˆู„ ุนู„ู‰ ู…ูƒุงูุขุช ุŒ ุฅุฐุง ุญุตู„ุช ุนู„ู‰ ู…ูƒุงูุฃุฉ ุŒ ูŠุชู… ุชุญุณูŠู† ุงู„ุณู„ุงุญ. ุนู†ุฏู…ุง ูŠุถุฑุจ ุทูˆุฑุจูŠุฏ ุนุฏูˆ ุŒ ูŠุชู… ุชุฎููŠุถ ุณู„ุงุญ ุงู„ู„ุงุนุจ.



ุนู†ุฏู…ุง ูŠุชู… ุชุฏู…ูŠุฑ ุฌู…ูŠุน ุงู„ุฎุตูˆู… ุนู„ู‰ ู…ุณุชูˆู‰ ุŒ ุชู‚ูˆู… ุจุงู„ุชุจุฏูŠู„ ุฅู„ู‰ ุงู„ู…ุณุชูˆู‰ ุงู„ุชุงู„ูŠ. 100 ู…ุณุชูˆู‰ ูู‚ุท.



ู…ู† ุญูŠุซ ุงู„ู„ุนุจุฉ ุŒ ูุฅู† ุงู„ู…ุณุชูˆู‰ ู‡ูˆ ู…ูˆุฌุฉ (Wave) ุŒ ูˆูŠุชู… ุฏู…ุฌ ุงู„ุนุฏูŠุฏ ู…ู† ุงู„ู…ูˆุฌุงุช ููŠ ู…ุณุชูˆู‰ ูƒุจูŠุฑ (Level) ุŒ ูˆู‡ูˆ ุจุจุณุงุทุฉ ุชุบูŠูŠุฑ ููŠ ุงู„ุฎู„ููŠุฉ ุŒ ุฃูŠ ูู‚ุท 4 ู…ุณุชูˆูŠุงุช ูƒุจูŠุฑุฉ ููŠ ูƒู„ ู…ู†ู‡ุง 25 ู…ูˆุฌุงุช. ููŠ ุงู„ู…ูˆุฌุฉ ุงู„ุฃุฎูŠุฑุฉ ู…ู† ุงู„ู…ุณุชูˆู‰ ุงู„ุนุงู„ูŠ ุŒ ุนุงุฏุฉ ู…ุง ูŠูƒูˆู† ู‡ู†ุงูƒ ุฑุฆูŠุณ - ุนุฏูˆ ู„ู‡ ู‚ูŠู…ุฉ ูƒุจูŠุฑุฉ ููŠ ุงู„ุญูŠุงุฉ ูˆุฃุณู„ุญุฉ ู‚ูˆูŠุฉ.



https://github.com/EntityFX/laseroid/blob/master/doc/LaserAgeNext.pngุŸraw=true



ู„ุนุจุฉ ู…ู†ุทู‚ ุงู„ุฃุนู…ุงู„



ู…ุณุงุญุฉ ุงู„ู„ุนุจ



ุฅู†ู‡ุง ู…ู†ุทู‚ุฉ ู…ุณุชุทูŠู„ุฉ ุนุงุฏูŠุฉ ุŒ ููŠ ุงู„ุฌุฒุก ุงู„ุนู„ูˆูŠ ุชูˆุฌุฏ ุณูู† ู…ุนุงุฏูŠุฉ ุŒ ูˆุฃุฏู†ุงู‡ ู„ุงุนุจ.



, , .



https://github.com/EntityFX/laseroid/blob/master/doc/Stage.pngุŸraw=true





.

( ) ( ).



, : ( ), .

1 (), 0 .





  • โ€”

    • โ€” 1
    • โ€” 2
    • โ€” 3


    • โ€” 4
    • โ€” 5
  • โ€” 6 7 ( )
  • โ€” 8 ( )
  • โ€” 9 ( , , )


:



  • โ€” 15-19 ( , , )
  • โ€” 20-24
  • โ€” 25-29
  • โ€” 30-34
  • โ€” 30-34
  • โ€” 35 โ€” 39
  • โ€” 40+




Hit Points
1 5 25 , ,
1 5 50
3 7 30
2 8 30 3
2 4 30
4 4.5 30
2 3.8 40
4 - 15/55 5




1
2 +
3 + +
4 + + +
5 + + + +
6 + +
7 + +
8 + +
9 + +
15 โ€” 19 + + +
20 โ€” 24 + + +
25 โ€” 29 + + +
30 โ€” 34 + + +
35 โ€” 39 + + +
40+ + + +






2.5
3.5
4.5
5
3
3.2 โ€” 3.8
4 โ€” 6
-


, .



, . ().



:



"torpedo": {
    "sprite": "Bullet1_1.png", // 
    "isRandomIntensity": false, //     - true    - false
    "intensity": [
        // 0
        {
            "min": 50, //  
            "max": 200, //  
            "type": "pause" //pause -  , shoot -  ()
        },
        // 1
        {
            "min": 100,
            "max": 200,
            "type": "shoot"
        },
        {
            "min": 50,
            "max": 80,
            "type": "pause"
        },
        {
            "min": 30,
            "max": 100,
            "repeat": 2
        }
    ],
    "speed": 2.5, //
    "type": "bullet", // 
    "sound": "alienTorpedo"
}






, .



โ† โ†’. .



( ).





, , , . .



1 2
2 4
10 ()
10 -
10 ( )
30 ( ) ( )
30 ( )
30
1 2
30 ( )
30
35 +
35 + + +
100 ( ) + ( )
250 ( )
500 + + + + + + +
1000 () + + + + + + + + ( )


JSON- :



"alien10": {
    "life": 35,
    "weapons": [
        {
            "weapon": "blueTorpedo",
            "position": {
                "x": -6,
                "y": 0
            }
        },
        {
            "weapon": "blueTorpedo",
            "position": {
                "x": 6,
                "y": 0
            }
        }
    ],
    "sprite": "AlienShip10_1.png",
    "movement": "horizontalFast",
    "killPoints": 2100
}


JSON- :



"horizontalFast": {
    "movements": [
        {
            "type": "freeMovement", //freeMovement - , followPlayer -    (  )
            "speedDelta": {
                "vx": -6,
                "vy": 0
            },
            "intensity": [ //    
                {
                    "min": 20,
                    "max": 150
                },
                {
                    "min": 150,
                    "max": 350
                }
            ]
        }
    ]
}






https://raw.githubusercontent.com/EntityFX/laseroid/master/resources/laser-age/graphics/PowerUps_1.png,



https://raw.githubusercontent.com/EntityFX/laseroid/master/resources/laser-age/graphics/Upgrade.png, . , ().





, . .



JSON- :



        "2": {
            "level": 1, 
            "enemies": [ //  
                {
                    "id": "alien1",
                    "position": {
                        "x": 200,
                        "y": 35
                    }
                },
                //...
                {
                    "id": "alien1",
                    "position": {
                        "x": 525,
                        "y": 40
                    }
                }
            ],
            "bonuses": [ //  
                {
                    "id": "bonus1",
                    "position": {
                        "x": 350,
                        "y": 10
                    }
                }
            ]
        },


JavaScript



JavaScript, Hexi JS: https://github.com/kittykatattack/hexi .



:



  • (, )
  • , ,


    • -. JSON (, )
  • (), -.


- TexturePacker



https://github.com/EntityFX/laseroid/blob/master/doc/ships-atlas-texture.pngุŸraw=true



: https://github.com/kittykatattack/sound.js



:







:



https://github.com/EntityFX/laseroid/blob/master/doc/diagrams/game.pngุŸraw=true





https://github.com/EntityFX/laseroid/blob/master/doc/diagrams/core.pngุŸraw=true



Main



.



:



  • resources โ€” (, , json)
  • sounds โ€” : โ€” , โ€”
  • gameScene โ€” HexiJS
  • game โ€” Game
  • hexi โ€” HexiJS
  • gameStorage โ€” localStorage


:



  • init() โ€” HexiJS
  • load() โ€” (, , json)
  • setup() โ€” , ,
  • playLoop() โ€” ( , , , ).
  • saveGame() โ€”
  • loadGame() โ€”


:



Main.resources = [
        "images/environment1.png",
        "images/environment2.png",
        "images/environment3.png",
        "images/environment4.png",
        "images/interface.png",
        "images/life-icon.png",

        "images/ships-texture.json",
        "images/bullet-texture.json",

        "sounds/alien-torpedo-shoot.wav",
        "sounds/alien-red-plasma-shoot.wav",
        "sounds/hero-torpedo-shoot.wav",
        "sounds/explode.wav",
        "sounds/hero-green-plasma-shoot.wav",
        "sounds/alien-green-plasma-shoot.wav",
        "sounds/alien-blue-torpedo-shoot.wav",
        "sounds/alien-yellow-laser.wav",
        "sounds/pulse-plasma.wav",
        "sounds/laser.wav",

        "sounds/track0.ogg",
        "sounds/track1.ogg",
        "sounds/track2.ogg",
        "sounds/track3.ogg",
        "sounds/track4.ogg",

        "data/hero-configuration.json",
        "data/levels-configuration.json",
        "data/enemy-configuration.json",
        "data/ui-configuration.json",
    ];


Game



.



:



  • level โ€” . : { "wave": 1 // , "type": 1 }
  • score โ€” . : {"points": 0 }
  • bulletsController โ€” BulletsController.
  • enemyController โ€” EnemyController. ( .. )
  • player โ€” Player
  • hexi โ€” Hexi ()
  • game โ€” Game
  • gameStorage โ€” GameStorage


:



  • clearShips() โ€” ,
  • setupLevel() โ€” ( , , )
  • nextLevel() โ€”
  • previousLevel() โ€”
  • forwardLevel() โ€” ( 5)
  • rewindLevel() โ€” ( 5)
  • restoreState(gameState: JSON) โ€” gameState
  • resetGame() โ€” ( )
  • update() โ€”
  • enemyDestroyed() โ€”


GameStorage



.



:



  • game โ€” Game


:



  • save() โ€”
  • load() โ€”


InputDevice



: click touch , .



:



  • game โ€” Game


:



  • init() โ€” callback'
  • loadTapped() โ€” "Load"
  • storeTapped() โ€” "Store"
  • resetTapped() โ€” "Reset"
  • pauseTapped() โ€” "Pause"




https://github.com/EntityFX/laseroid/blob/master/doc/diagrams/actors.pngุŸraw=true



Actor



.



:



  • hexi โ€” Hexi ()
  • game โ€” Game
  • life โ€”
  • initialLife โ€”
  • sprite โ€” Hexi.Sprite
  • shipConfiguration โ€”


:



  • move() โ€”
  • update() โ€”
  • setPosition(position: {x, y}) โ€”


WeaponedActor



( ) .



:



  • automatedWeapons โ€”
  • canShoot โ€”
  • isWeaponShooting โ€”


:



  • startShoot() โ€”
  • stopShoot() โ€”
  • onShootStarted() โ€” ,
  • onShootStopped() โ€” ,
  • updateShooting() โ€”


Enemy



.



:



  • type โ€”
  • syncWeapons โ€”
  • movementEngine โ€” MovementEngine


:



  • setWeapon() โ€”
  • shootWithWeapon() โ€”
  • setLifeLine() โ€”
  • hit() โ€” ()


MovementEngine



.



, . vx, vy . ( ).



:



  • movementsConfiguration โ€”
  • firstMovementConfiguration โ€”
  • movementItensity โ€”
  • movementItensityCounter โ€”
  • movementItensitySlot โ€”
  • isBounceBottom โ€” . false,


:



  • setMovement() โ€”
  • updateMovement() โ€”


Player



.



:



  • weapons โ€”
  • collisionSprite โ€” ( , )
  • weaponLifeLevels โ€”
  • invisibilityCounter โ€” ( , )


:



  • upgrade() โ€” (+1 )
  • downgrade() โ€” (+1 )
  • shootWithLaser(currentWeapon, weapon) โ€”
  • shootWithBullets(currentWeapon, weapon) โ€”
  • setWeapon() โ€”
  • setLife(life: number) โ€” ( )
  • hitUpgrade(upgradeItem) โ€”


Bonus



. .



:



  • type โ€”
  • movementEngine โ€” MovementEngine
  • upgradeBonus โ€”


:



  • shootWithUpgrade(upgradeBonus: JSON) โ€”


EnemyController



, , .



:



  • enemies โ€”
  • bonuses โ€”
  • player โ€”
  • upgrades โ€”


:



  • isLevelCompleted() โ€” ( , )
  • update() โ€”
  • clear() โ€” ,


BulletsController



(), .



:



  • playerBullets โ€”
  • enemyBullets โ€”
  • explosionSplashes โ€”
  • playerLaser โ€” ( ).


:



  • update() โ€” ,
  • clear() โ€” ,
  • updatePlayerBullets() โ€”
  • updatePlayerLaser() โ€”
  • updateEnemyBullets() โ€”
  • updateExplosions() โ€”




JavaScript.



, , .



, , ..



, !



!





http://laseroid.azurewebsites.net/ โ€”

https://github.com/EntityFX/laseroid โ€”




All Articles