編集:これをもっと早くキャッチしなかったなんて信じられない. 私の問題は、最初の変数を何度も何度も再宣言し、本質的にプログラムを続行するのではなく、最初からやり直すことでした。それを修正するために、最初の 2 行を次のように置き換えました。
if (initialized === undefined) {
trace("INITIALIZING");
var MCs = [];
var lastPos = "intializer";
var initialized = 1;
}
今では魅力のように機能します。私はこれに初心者のように感じます。時間を無駄にしてしまった人には申し訳ありません。私は自分の質問への回答としてこれを投稿しますが、私はまだ新しいのでできません。
元の投稿は次のとおりです。
広告をランダムに選択して再生し、別の広告をランダムに再生するフラッシュを作成しようとしています。そのために、配列をシャッフルし、配列gotoAndPlay
の最初の要素のラベルを -ing してから、その要素を削除することで成功しました。各広告の最後にはgotoAndPlay(1);
、すべてのメイン コードが最初のフレームにあります。配列が空の場合、再構築して再シャッフルします。
問題は、すべての広告が実行されるまで広告を繰り返してほしくないということです。私はそれを理解したと思いますが、私は前向きではありません. さらに、配列の最後の要素を新しい要素の最初の要素と同じにしたくないので、同じ広告が連続して 2 回表示されることはありません。使用したばかりの要素が使用しようとしている要素と一致するかどうかを検出し、一致した場合は再シャッフルしようとしていますが、私のテストでは、同じ広告が 2 回続けて表示されることがあります。
私は明らかに何か間違ったことをしていますが、ActionScript3 にまったく慣れていない (そして実際にフラッシュする) ので、それが何であるかを特定するのに非常に苦労しています。これが私が今持っているものです:
var MCs = [];
var lastPos = "intializer";
if (MCs.length == 0) {
MCs = reset();
if (lastPos == MCs[0]) {
while (lastPos == MCs[0]) {
MCs = reset();
}
}
}
if (MCs.length > 0) {
lastPos = MCs[0];
MCs.splice(0,1);
gotoAndPlay(lastPos+"MC");
}
function reset(){
var PrepMCs = new Array("Image1", "Image2", "Image3");
var WorkMCs = new Array(PrepMCs.length);
var randomPos:Number = 0;
for (var i:int = 0; i < WorkMCs.length; i++)
{
randomPos = int(Math.random() * PrepMCs.length);
WorkMCs[i] = PrepMCs.splice(randomPos, 1)[0];
}
return WorkMCs;
}
個人的には、これを JavaScript、HTML、および画像だけで行いたいと考えています。それは本当に簡単だろう。しかし、ホスティング/CMS の理由から、私には制御できないため、1 つのファイルまたは 1 つのコード ブロックに制限されています。私は外部で何かをホストすることはできません。私が知る限り、これには Flash が最良の選択肢です。
どんな助けでも大歓迎です、ありがとう!私がひどく、ひどく間違ったことをして、これがまったく実行されるのが不思議な場合は、遠慮なく教えてください!
編集: 2 回目の実行が最初の実行と同じ順序であれば、まったく問題ありません。主なことは、ランダムである必要があることです。これはおそらく実装がはるかに簡単です。
編集 2: 大規模な DERP HERE. 実行するたびに再初期化MCs
されlastPos
ます...つまり、毎回シャッフルして最初からやり直します。私が研究しなければならないのは、変数がまだ初期化されていない場合にのみコード行を実行する方法です。