こんにちは、feetです。
過去ログや、他のサイトで調べてみたのですが
自分の書き方が初心者のせいかマッチするものが見当たりませんでした。
このまま悩み続けても時間が消費されるばかりだと思ったので
こちらに投稿させていただきます。
質問内容は「弾を撃ちながら斜め移動をする」です。
現状は、斜め移動は可能で、上下左右の移動も可能。
静止中、上下左右と斜め(右上)移動中に弾が発射できる状態です。
右上を除く斜め移動時にスペースを押しても弾が出ないのです・・・。
また、上と同じ意味ですが、先にスペースを押していると右上を除く斜め移動ができません。
行の位置を入れ替えたり、別々のフレームに書いたり
色々と試しましたが直りませんでした。
なぜ右上移動時だけ発射可能なのかもさっぱりです。
お手すきな方がいましたら、どの部分がまずいのかご指摘もらえないでしょうか?
以下ソースになります。
記述場所「_root上の1フレーム目」
//_root.field上に新しいMC"bulletField"深度1を作成
_root.createEmptyMovieClip("bulletField", 1);
//attachMovie の名前、深度につかう変数
var a:Number = 0;
//弾複製function
function createBullet():Void {
_root.bulletField.attachMovie("bullet", "bullet"+a, a);
a++;
}
記述場所「_root上に配置したplayer(MC)」
onClipEvent (load) {
var speed:Number = 0; //計算用のスピード変数
var roboSpeed:Number = 6; //roboのスピード
var rot:Number = 0; //roboの角度
//ムービー上のミサイルの数を数える変数
var bulletcounter:Number = 0;
//ミサイルの最大連射数を持つ変数
var maxbullet:Number = 5;
var shot:Boolean = true; //発射可能状態を表すため
var getTime:Number = 0; //現在の時間(秒数)を取得する為の変数
var shotTimeNow:Number = 0; //発射した時間を記憶させる為の変数
}
onClipEvent(enterFrame){
//0?59.999秒を取得
getTime = getTimer()/1000%60;
//前回打った時に取得した秒数と、現在の秒数の差が0.1空いていれば発射可能状態にする
if ( ((shotTimeNow - getTime) < -0.1) || ((shotTimeNow - getTime) > 0.1 ) ) { shot = true; }
//スペースキーが押され、場にある弾がMAX以下で、発射可能状態のみ弾を発射する
if ( (Key.isDown(Key.SPACE) == true ) && (shot == true) && ( bulletcounter < maxbullet ) ){
_parent.createBullet();
//ミサイルが一発発射されたのでbulletcounterを1増やす
bulletcounter++;
shotTimeNow = getTimer()/1000%60;
shot = false;
}
if ( (Key.isDown(Key.UP) && Key.isDown(Key.LEFT)) == true ) {
rot = 215;
speed = roboSpeed;
}
else if ((Key.isDown(Key.DOWN) && Key.isDown(Key.LEFT)) == true ) {
rot = 135;
speed = roboSpeed;
}
else if ((Key.isDown(Key.UP) && Key.isDown(Key.RIGHT)) == true ) {
rot = 315;
speed = roboSpeed;
}
else if ((Key.isDown(Key.DOWN) && Key.isDown(Key.RIGHT)) == true ) {
rot = 45;
speed = roboSpeed;
}
else if( Key.isDown( Key.UP ) == true ){
rot = 270;
speed = roboSpeed;
}
else if( Key.isDown( Key.DOWN ) == true ){
rot = 90;
speed = roboSpeed;
}
else if( Key.isDown( Key.RIGHT ) == true ){
rot = 0;
speed = roboSpeed;
}
else if( Key.isDown( Key.LEFT ) == true ){
rot = 180;
speed = roboSpeed;
}
else{
speed = 0;
}
// 移動量を求める
this._x += Math.cos(rot * Math.PI / 180) * speed;
this._y += Math.sin(rot * Math.PI / 180) * speed;
}
弾のMCには進むソースと画面外にいったらbulletcounterを-1して自身を消すソースが書かれているだけです。
それと質問内容とは違うのですが・・・
長いソースの場合は、どこかのサイトにファイルをUPしたほうがいいのでしょうか?
切り分けて載せるのが自分でも良いと思うのですが
何処が間違っているかわからない状態なのでほとんど載せてます。