this.dom.className = this.magicType[this.type]; /this.dom.style.display = " none";
// 新しいスティック クラスを作成します
var Stick = function() {
// 航空機に対応する DOM 要素
this.dom = null; 🎜>// ボールが動いているかどうか
this.isMove = false;
// 動きの ID
this.moveId = null;
// ピンボールかどうか
this. isSend = false;
// マークを大きくします
this.bigCount = 0;
// マークを小さくします
this.smallCount = 0;
// スティックの幅を大きくしたり小さくしたりする
this.init(); }
Stick.prototype = {
// ゲームの背景 Dom
gamePanel: null,
// ゲームの背景の幅
gameWidth: 0,
// ゲームの背景の高さ
gameHeight: 0,
// 魔法の杖の移動速度
movepx: 10,
// 魔法の杖の移動頻度
movep: 30,
/ / 方向キーの値は
keyCodeAndDirection: {
37 : "left",
39 : "right"
} に対応します,
// 初期化
init : function() {
this.dom = document.createElement("div");
this.dom.className = "stick" ;
},
// 位置を設定します
setPosition: function(gamePanel, width, height) {
// 魔法の杖をゲームの背景に追加します
this.gamePanel = gamePanel;
this .gamePanel.appendChild(this.dom);
// 航空機の初期位置を設定します
this.dom.style.left = ( width - this.dom.clientWidth)/2 "px";
this.dom.style.top = height - this.dom.clientHeight "px"
// の幅と高さを取得します。ゲームの背景
this.gameWidth = width;
this .gameHeight = height
},
// キーボード押下イベント
keydown: function(e) {
var keyCode = e.keyCode;
if (!this.isMove) {
this.move(keyCode);
},
// キーボードリリース Event
keyup: function(e) {
// キーボードがリリースされたかどうかを判断します
if (this.keyCodeAndDirection[e .keyCode]) {
// 移動を停止します
this.stopMove();
} else if (e.keyCode == 32) {
//非射撃に設定
this.isSend = false;
}
},
// Move
move: function(keyCode) {
// 移動に設定します
this isMove = true
// 移動方向を決定します
switch(this.keyCodeAndDirection[keyCode]) {
case "left" : {
this.moveId = setInterval(function() {_this.moveLeft();},
break
;
}
ケース "正しい" : {
this.moveId = setInterval(function() {_this.moveRight();}, _this.movesp);
}
default : Break;
}
},
// 左に移動
moveLeft: function() {
var left = this.dom[ "offsetLeft"];
left = left - this.movepx >= 0 ? left - this.dom.style : 0; ["left"] = left "px";
if (left == 0) {
this.stopMove();
},
// 右に移動
moveRight : function() {
var left = this.dom["offsetLeft"]
var maxDistance = this.gameWidth - this; .dom.clientWidth;
left = left this.movepx <= maxDistance;
this.dom.style["left"] = left "px"; >if (left == maxDistance) {
this.stopMove();
},
// 小さくする
changeSmall : function() {
if (this.smallCount >= 1) {
return;
} else {
this.dom.style .width = 80 "px";
this.smallCount ;
this.bigCount -- : this.bigCount 0;
this.dom.style.left = parseInt(this.dom.style.left, 10) 20 "ピクセル";
this.dom.style.width = 40 "ピクセル"; },
// 大きくなります
changeBig : function() {
if (this.bigCount >= 1) {
return; 🎜>} else {
this.dom.style.width = 80 "px";
this.smallCount -- : this.smallCount 0;
}
if (parseInt(this.dom.style.left, 10)
this.dom.style .width = parseInt(this.dom.style.width, 10) 75 parseInt(this.dom.style.left, 10) "px";
this.dom.style.left = 0 "px"; >
return;
} else if (this.dom.style.width 150 parseInt(this.dom.style.left, 10) >= this.gamePanel.clientWidth) {
this.dom.style.left = parseInt(this .dom.style.left, 10) - 150 "ピクセル";
this.dom.style.width = this.dom.style.width 150 "ピクセル" ;
return;
} else {
this.dom.style.left = parseInt(this.dom.style.left, 10) - 75 "px";
this.dom.style.width = 150 " px";
}
},
// 移動を停止
stopMove: function() {
this.isMove = false;
clearInterval(this.moveId);
},
// ピンボール、外部インターフェイス、
onSendBall を起動します。 () {},
//スコア外部インターフェースを変更
onChangeScore: function() {}
}
いくつかの難しい技術の実装
キーボードの左右の矢印キーを使用してベゼルを移動するコードの実装:
// キーボード押下イベント
keydown : function(e) {
var keyCode = e.keyCode;
if ( !this.isMove) {
this.move(keyCode)
}
},
//キーボードリリースイベント
keyup: function(e) {
// キーボードがリリースされたかどうかを判断します
if (this.keyCodeAndDirection[e.keyCode]) {
//移動を停止
this.stopMove( ;
},
// 移動
move : function(keyCode) {
// 移動に設定
this.isMove = true;
var _this = this;
// 移動方向を決定します
switch(this.keyCodeAndDirection[keyCode]) {
case "left" : {
this.moveId = setInterval(function() {_this.moveLeft();}, _this.movesp);
}
case "right" : {
this.moveId = setInterval(function() {_this.moveRight();}, _this.movesp);
break;
}
default : Break;
}
},
// 左に移動
moveLeft: function() {
var left = this .dom["offsetLeft"];
left = left - this.movepx >= 0 ? left - this.movepx : 0;
this.dom.style["left"] = left "px";
if (left == 0) {
this.stopMove();
}
},
// 移動right
moveRight : function( ) {
var left = this.dom["offsetLeft"];
var maxDistance = this.gameWidth - this.dom.clientWidth
left = left; this.movepx <= maxDistance ? left this.movepx: maxDistance;
if (left == maxDistance) >
this.stopMove( );
}
},