3

こんにちは、javascript はまったく初めてで、ヘルプが必要です。HtML javascript ゲームを作成しています。敵をクリックできるようにするにはどうすればよいですか?? ゲームの敵をうまく作成できましたが、現在、敵はゲーム画面の上部から降りてきて、下部に出ます。プレイヤーが敵に触れるとゲームオーバーになりますが、プレイヤーが敵をクリックして代わりにゲームオーバーに進むことができるようにしたいです。私は数週間試してきましたが、迷っています。

また、マウスがプレーヤーであるように、現在、私のプレーヤーはマウスによって制御されています。

衝突テストを変更する必要がありますか?? プレイヤーが敵をクリックできるようにする方法がわかりません。onmouseclick などの「クリック」機能を登録する必要がありますか?

使用しています:

window.addEventListener("mousedown",onDown,false);  
window.addEventListener("mousemove",onMove,false);
window.addEventListener("mouseup",onUp,false);  

ありがとうございました。正しい方向に進むには、ほんの少しの助けが必要です。

前もって感謝します :)

プレイヤーがマウス(プレイヤー)を動かしている時の機能です。私のプレーヤーはマウスの動きによって制御されるので、それは機能します:

function onMove(e) {
                if (!e) var e = window.event;

                //get mouse position

                var posx = 0;
                var posy = 0;

                if (e.pageX || e.pageY)     {
                    posx = e.pageX;
                    posy = e.pageY;
                }

                else if (e.clientX || e.clientY)    {
                    posx = e.clientX + document.body.scrollLeft
                        + document.documentElement.scrollLeft;
                    posy = e.clientY + document.body.scrollTop
                        + document.documentElement.scrollTop;
                }

                var totalOffsetX = 0;
                var totalOffsetY = 0;
                var currentElement = canvas;

                do{
                    totalOffsetX += currentElement.offsetLeft;
                    totalOffsetY += currentElement.offsetTop;
                }
                while(currentElement = currentElement.offsetParent)

                mouseX = posx - totalOffsetX;
                mouseY = posy - totalOffsetY;

            }

    }

マウスアップの場合:

function onUp(e) {
            mouseDown = false;
        }

敵のために、私はやった:

enemies = new Array();
            createEnemies();

敵オブジェクト (ゲーム内の食べ物や果物) のアニメーション機能:

function createEnemies() {
            var enemy
            if(level>2 && Math.random()<0.2) {
                var breakfastItems =  Math.floor(Math.random() * breakfastsheets.length);
                var tmpAnimation = new Animation(breakfastsheets[breakfastItems],4,2)
                enemy = new Skull(tmpAnimation,Math.random()*(canvas.width-tmpAnimation.width),-tmpAnimation.height);
            } else if(level>3 && Math.random()<0.2) {
                var randomVegetable =  Math.floor(Math.random() * vegetablesheets.length);
                var tmpAnimation = new Animation(vegetablesheets[randomVegetable],4,2)
                enemy = new Skull(tmpAnimation,Math.random()*(canvas.width-tmpAnimation.width),-tmpAnimation.height);
            }else { 
                var randomFruit = Math.floor(Math.random() * enemysheets.length);
                var tmpAnimation = new Animation(enemysheets[randomFruit],4,2)
                enemy = new Skull(tmpAnimation,Math.random()*(canvas.width-tmpAnimation.width),-tmpAnimation.height);
            }

            enemy.setExplosionSound(explosionSoundPool);

            enemies.push(enemy);
        }

言い忘れていましたが、敵の「スカル」はこれです。ミサイルは忘れてください。

function Skull (image, x,y, width, height) {
//call constructor of parent object
DisplayObject.call(this,'skull', image, x,y, width, height);

//initialise objects
this.img.play();
this.img.setLoop(true);
this.img.setRange(0,4);

//private variables
var dying = false;
var alive = true;
var speed = 5;

var explosionSound;

//public methods

this.update = function(game_area, missiles) { //game area is a Rect2d, missiles is an array of display objects.
    this.y+=speed;
    this.img.next();
    if(!dying && missiles) {
        for(var i = 0; i<missiles.length; i++) {
            if(Collision.test(missiles[i],this)) {
                missiles[i].kill();
                dying = true;
                this.img.setRange(4,8);
                this.img.setLoop(false);
                this.img.setFrame(0);
                //play explosion sound. 
                if(explosionSound) explosionSound.play(0.5);
            }
        }
    }

    if(Collision.isOutside(this,game_area) || (dying && !this.img.isPlaying())) {
        alive = false;
    }

}

//set a sound to be played when the enemy is hit.
this.setExplosionSound = function (soundPool) {
    explosionSound = soundPool;
}

this.isDying = function () { 
    return dying; 
}

this.isDead = function () { 
    return !alive; 
}

}

Skull.prototype = new DisplayObject();

4

1 に答える 1

1

敵が画面を動き回る四角い物体だとすると、

あなたができることは、現在の位置を含む敵のクラスを作成することです:

function newEnemy(){
   this.topLeftx = 'some random value'
   this.topLefty = 'some random value'
   this.bottomRightx = 'some random value'
   this.bottomRighty = 'some random value'
   this.isSelected = false;
   ...

}

次に、ユーザーがクリックしたときに呼び出されるメソッドを用意し、敵のリストを 1 つずつ調べます。敵ごとに、ユーザーの (x,y) 座標 (マウス上) が敵の正方形の内側にあるかどうかをチェックする「ヒット テスト」関数を呼び出します。

いずれかの形状が選択されている場合は、それらを true に設定し、次の描画サイクルで、選択した敵を別の方法で描画したか、まったく描画しなかったか、つまり破壊したか?

敵が円形の場合、それぞれの半径を持つ x、y 座標が必要になります。次に、円の中心とマウス座標の間に引かれた線が円自体の半径よりも小さいかどうかを確認します。ピタゴラスの定理を使用して長さを見つけます。

于 2012-10-15T15:33:38.590 に答える