0

私はJavaScriptに少し慣れていないので(学校でJavaScriptを使い始めたばかりです)、このプログラムを授業で実行するために周りを見回しています。何らかの理由で、(現在作業しているものでは)正しく機能させることができません。PlayerオブジェクトをMissleオブジェクトの配列で埋めようとしています...コードをこのオブジェクトの使用に切り替える前は、 「ミサイル」を表示することはできますが、今は行き詰まっています。

必要なコードのみを配置しています:

function Player(){
    this.x = c.width/2;
    this.y = c.height-20;
    this.w = 50;
    this.h = 10;
    this.dx = 30;
    this.score = 0;
    this.missles = new Array();}

function Missle(x, y){
    this.x = x;
    this.y = y;
    this.dy = 10;
    this.w = 8;
    this.h = 8;
    this.visible = "false";}


function init1P(){
if (playing == "true"){
    player = new Player();
    animate1P();
}}

function animate1P(){
cntxt.clearRect( 0, 0, c.width, c.height );

cntxt.fillStyle="#000000";
cntxt.fillRect(0,0,c.width,c.height);

cntxt.fillStyle="#ffffff";
cntxt.font="34px Verdana";
cntxt.fillText(player.score, 10, c.height-10);  

cntxt.fillStyle="#ffffff";

cntxt.fillRect(player.x,player.y,player.w,player.h);

//cntxt.fillRect(comp.x,comp.y,comp.w,comp.h);

if ( player.missles.visible == "true" ) {
    cntxt.fillStyle = "#FF0000";
    cntxt.fillRect( player.missles.x, player.missles.y, player.missles.w, player.missles.h );
    //isHit();
    if ( hit == "false" ) {
        player.missles.y -= player.missles.dy;
        if ( player.missles.y <= 0 ) {
            player.missles.visible = "false";
        }
    }
}

// request new frame
if ( playing == "true" ) {
    requestFrame( function() { animate1P(); } );
}

//moveComp();
checkBoundaries(player);
//checkBoundaries(comp);
//isHit(player);
//isHit(comp);  }

function shoot() {
player.missles.push(new Missle(player.x + player.w/2, player.y + 10));
player.missles.visible = "true";
hit = "false";}
4

1 に答える 1

1

あなたのプレーヤーは、配列を使用して示した複数のミサイルを持っているはずです。

this.missles = new Array();

for配列を使用する場合は、各要素に何かを適用するためにループする必要があります (例: を使用)。したがって、player.missles.visible = "false"実際には、各要素ではなく、配列自体にプロパティを設定するだけです。あなたがしなければならないでしょう:

for(var i = 0; i < player.missles.length; i++) {
  player.missles[i].visible = "false";  // player.missles[i] is one item on each iteration
}

同じことが描画にも当てはまります。ループ内の各ミサイルのデータを取得して更新します。

for(var i = 0; i < player.missles.length; i++) {
  if ( player.missles[i].visible == "true" ) {
    // ...
}

また、JavaScript にはブール値があることに注意してください。true/だけを使用して、次のようfalseに直接使用できます。if

if(player.missles[i].visible) {
  // ...
于 2012-09-07T16:58:47.843 に答える