Changeset 119 for pycodeshooter


Ignore:
Timestamp:
01/22/12 03:41:27 (13 years ago)
Author:
atzm
Message:

bgm/se support

Location:
pycodeshooter/trunk
Files:
9 added
3 edited

Legend:

Unmodified
Added
Removed
  • pycodeshooter/trunk/index.html

    r118 r119  
    1414    <script type="text/javascript"> 
    1515    window.onload = function () { 
    16         // load enemies 
    1716        var req = new XMLHttpRequest(); 
    1817        req.open("GET", document.getElementById("api").value, false); 
     
    2322        var msg             = document.getElementById("message"); 
    2423        var screen          = document.getElementById("screen"); 
     24        var soundCheck      = document.getElementById("sound"); 
    2525        var ctx             = screen.getContext("2d"); 
    2626        var enemyList       = JSON.parse(req.responseText).result; 
    2727 
     28        registerSound("bgm_title", document.getElementById("bgm_title")); 
     29        registerSound("bgm_stage1", document.getElementById("bgm_stage1")); 
     30        registerSound("se_start", document.getElementById("se_start")); 
     31        registerSound("se_encounter", document.getElementById("se_encounter")); 
     32        registerSound("se_damage_enemy", document.getElementById("se_damage_enemy")); 
     33        registerSound("se_damage_player", document.getElementById("se_damage_player")); 
     34        registerSound("se_bomb", document.getElementById("se_bomb")); 
     35        registerSound("se_destroy", document.getElementById("se_destroy")); 
    2836        setMessage(msg, "<br />"); 
    2937 
     38        // sound on/off 
     39        soundCheck.onclick = function() { 
     40            toggleSound(soundCheck.checked); 
     41        }; 
     42        soundCheck.click(); 
     43 
    3044        // title screen set 
     45        var titlebgm = document.getElementById("bgm_title"); 
    3146        var logoimg  = document.getElementById("logoimg"); 
    3247        var x        = (screen.width - logoimg.width) / 2; 
     
    4964        }, 20); 
    5065 
     66        playSound("bgm_title"); 
     67 
    5168        // start game 
    5269        screen.onclick = function() { 
     
    5572            } 
    5673 
    57             clearInterval(titleIntervalId); 
    58             titleIntervalId = 0; 
    59  
    60             var player = { 
    61                 "name":         document.getElementById("name").value, 
    62                 "image":        document.getElementById("p_img0"), 
    63                 "size":         parseInt(document.getElementById("size").value), 
    64                 "hitsize":      parseInt(document.getElementById("hitsize").value), 
    65                 "speed":        parseInt(document.getElementById("speed").value), 
    66                 "hitpoint":     parseInt(document.getElementById("hitpoint").value), 
    67                 "shotsize":     parseInt(document.getElementById("shotsize").value), 
    68                 "shotinterval": parseInt(document.getElementById("shotinterval").value), 
    69                 "shotspeed":    parseInt(document.getElementById("shotspeed").value), 
    70                 "shotlevel":    parseInt(document.getElementById("shotlevel").value), 
    71                 "numbombs":     parseInt(document.getElementById("numbombs").value) 
    72             }; 
    73  
    74             for (var n in player) { 
    75                 if (n == "name") 
    76                     continue; 
    77                 if (!player[n] || player[n] < 0) { 
    78                     setMessage(msg, "Invalid Input Data"); 
    79                     return; 
     74            titlebgm.pause(); 
     75            playSound("se_start"); 
     76 
     77            setTimeout(function() { 
     78                clearInterval(titleIntervalId); 
     79                titleIntervalId = 0; 
     80 
     81                var player = { 
     82                    "name":         document.getElementById("name").value, 
     83                    "image":        document.getElementById("p_img0"), 
     84                    "size":         parseInt(document.getElementById("size").value), 
     85                    "hitsize":      parseInt(document.getElementById("hitsize").value), 
     86                    "speed":        parseInt(document.getElementById("speed").value), 
     87                    "hitpoint":     parseInt(document.getElementById("hitpoint").value), 
     88                    "shotsize":     parseInt(document.getElementById("shotsize").value), 
     89                    "shotinterval": parseInt(document.getElementById("shotinterval").value), 
     90                    "shotspeed":    parseInt(document.getElementById("shotspeed").value), 
     91                    "shotlevel":    parseInt(document.getElementById("shotlevel").value), 
     92                    "numbombs":     parseInt(document.getElementById("numbombs").value) 
     93                }; 
     94 
     95                for (var n in player) { 
     96                    if (n == "name") 
     97                        continue; 
     98                    if (!player[n] || player[n] < 0) { 
     99                        setMessage(msg, "Invalid Input Data"); 
     100                        return; 
     101                    } 
    80102                } 
    81             } 
    82  
    83             var imgs = document.getElementsByTagName("img"); 
    84             for (var i = 0; i < imgs.length; i++) { 
    85                 if (imgs[i].getAttribute("id").match(/^e_img/)) { 
    86                     addEnemyImage(imgs[i]); 
     103 
     104                var imgs = document.getElementsByTagName("img"); 
     105                for (var i = 0; i < imgs.length; i++) { 
     106                    if (imgs[i].getAttribute("id").match(/^e_img/)) { 
     107                        addEnemyImage(imgs[i]); 
     108                    } 
    87109                } 
    88             } 
    89  
    90             document.onkeydown  = function (ev) { setKeyDown(ev.keyCode); }; 
    91             document.onkeyup    = function (ev) { setKeyUp(ev.keyCode); }; 
    92             document.onkeypress = function (ev) { setKeyPress(ev.charCode); }; 
    93  
    94             initGame(document.getElementById("screen"), msg, player); 
    95  
    96             var enemyIntervalId = setInterval(function() { 
    97                 if (numEnemies() < parseInt(document.getElementById("numenemies").value)) { 
    98                     var ids = Object.keys(enemyList); 
    99                     var id  = ids[Math.floor(Math.random() * ids.length)]; 
    100                     addEnemy(enemyList[id]); 
    101                 } 
    102             }, 1500); 
     110 
     111                document.onkeydown  = function (ev) { setKeyDown(ev.keyCode); }; 
     112                document.onkeyup    = function (ev) { setKeyUp(ev.keyCode); }; 
     113                document.onkeypress = function (ev) { setKeyPress(ev.charCode); }; 
     114 
     115                playSound("bgm_stage1"); 
     116                initGame(document.getElementById("screen"), msg, player); 
     117 
     118                var enemyIntervalId = setInterval(function() { 
     119                    if (numEnemies() < parseInt(document.getElementById("numenemies").value)) { 
     120                        var ids = Object.keys(enemyList); 
     121                        var id  = ids[Math.floor(Math.random() * ids.length)]; 
     122                        playSound("se_encounter"); 
     123                        addEnemy(enemyList[id]); 
     124                    } 
     125                }, 1500); 
     126            }, 1400); 
    103127        }; 
    104128    }; 
     
    126150性: <input type="text" value="5" size="3" id="hitpoint" /> 
    127151                ボム数: <input type="text" value="2" size="3" id="numbombs" /> 
     152                音楜: <input type="checkbox" checked="checked" id="sound" /> 
    128153                <br /> 
    129154                <canvas id="screen" width="320" height="480"></canvas> 
     
    138163                <input type="hidden" value="/etc/pycodebattler/?mode=json" id="api" /> 
    139164                <img src="images/logo.png" style="visibility: hidden;" id="logoimg" /> 
     165 
     166                <audio src="sounds/bgm_sht_a01.mp3", id="bgm_title" loop="true" preload="auto" /> 
     167                <audio src="sounds/bgm_sht_a02.mp3", id="bgm_stage1" loop="true" preload="auto" /> 
     168                <audio src="sounds/se_coinin_1.mp3", id="se_start" preload="auto" /> 
     169                <audio src="sounds/se_denshion_1.mp3", id="se_encounter" preload="auto" /> 
     170                <audio src="sounds/se_pyuun.mp3", id="se_damage_player" preload="auto" /> 
     171                <audio src="sounds/se_click_2.mp3", id="se_damage_enemy" preload="auto" /> 
     172                <audio src="sounds/se_zusyunzusyun.mp3", id="se_bomb" preload="auto" /> 
     173                <audio src="sounds/se_zugan.mp3", id="se_destroy" preload="auto" /> 
    140174 
    141175                <img src="images/ma1s.gif"  style="visibility: hidden;" id="p_img0"  /> 
     
    210244          <li>パワヌアップアむテム</li> 
    211245          <li>動䜜を凝る</li> 
    212           <li>音を鳎らす</li> 
    213246        </ul> 
    214247 
     
    221254        <ul style="font-size: small;"> 
    222255          <li><a href="http://www.civillink.net/">フリヌ玠材の来倢来人</a></li> 
     256          <li><a href="http://www.skipmore.com/sound/">ナりラボ8bitサりンド工房</a></li> 
    223257        </ul> 
    224258      </div> 
  • pycodeshooter/trunk/shooter/system.js

    r117 r119  
    2121        "height": 0 
    2222    }, 
     23    "sound":            {}, 
    2324    "message":          null, 
    2425    "enemyImages":      new Array(), 
     
    186187 
    187188        if (enemy.isDead()) { 
     189            playSound("se_destroy"); 
     190 
    188191            addDeathPieces( 
    189192                enemy.x, enemy.y, 
     
    202205 
    203206    trooper.draw(System.screen.ctx); 
     207} 
     208 
     209function toggleSound(val) { 
     210    for (var name in System.sound) 
     211        System.sound[name].muted = !val; 
     212} 
     213 
     214function registerSound(name, audio) { 
     215    System.sound[name] = audio; 
     216} 
     217 
     218function playSound(name) { 
     219    if (System.sound[name]) 
     220        System.sound[name].play(); 
    204221} 
    205222 
     
    287304        brrgs 
    288305    ); 
     306    enemy.registerCallback("damaged", function() {playSound("se_damage_enemy")}); 
    289307 
    290308    System.enemies.push(enemy); 
     
    415433    ); 
    416434 
    417     System.players.push(new Trooper( 
     435    var trooper = new Trooper( 
    418436        playerData.name, 
    419437        new ActionList([new ManualAction(new ManualShot())]), 
     
    455473                          playerData.shotlevel + 2, 
    456474                          -0.5)] 
    457     )); 
     475    ); 
     476    trooper.registerCallback("addBomb", function() {playSound("se_bomb")}); 
     477    trooper.registerCallback("damaged", function() {playSound("se_damage_player")}); 
     478 
     479    System.players.push(trooper); 
    458480 
    459481    for (var i = 0; i < System.players.length; i++) { 
  • pycodeshooter/trunk/shooter/trooper.js

    r114 r119  
    7575 
    7676    this.bullets    = new Array(); 
     77    this.callbacks  = {}; 
    7778    this.bomb       = null; 
    7879    this.name       = name; 
     
    172173 
    173174            // update my life 
    174             if (hit && this.life > 0) 
     175            if (hit && this.life > 0) { 
    175176                this.life--; 
     177 
     178                if (this.callbacks["damaged"]) 
     179                    this.callbacks["damaged"](this); 
     180            } 
    176181        } 
    177182    }; 
     
    215220        this.bullets.push( 
    216221            new bulletType(size, color, frame, this.w, this.h, this.x + x, this.y + y, dir, speed)); 
     222 
     223        if (this.callbacks["addBullet"]) 
     224            this.callbacks["addBullet"](this); 
    217225    }; 
    218226 
     
    242250                                 this.size * 2, 10, this.bombColors); 
    243251            this.numBombs--; 
    244         } 
     252 
     253            if (this.callbacks["addBomb"]) 
     254                this.callbacks["addBomb"](this); 
     255        } 
     256    }; 
     257 
     258    this.registerCallback = function(name, callback) { 
     259        this.callbacks[name] = callback; 
    245260    }; 
    246261} 
Note: See TracChangeset for help on using the changeset viewer.