Actionscript 3 As3数学和随机选择对象的一些问题[请帮助!]
我在AS3中做事情有点困难。我有一个名为Rand的var,如果这个Rand在0-10之间,它将显示死亡盘。如果rand在90-100之间,则会出现kingdisk。我想实现的是,这些磁盘不会连续出现两次。我尝试了布尔运算,但没有成功。除此之外,只有当“var”rand介于我提到的数字之间时,国王和死亡圆盘才会出现。有时它出现在兰特编号之外。我希望有人能帮我解决这个问题 一些信息:Actionscript 3 As3数学和随机选择对象的一些问题[请帮助!],actionscript-3,flash,math,Actionscript 3,Flash,Math,我在AS3中做事情有点困难。我有一个名为Rand的var,如果这个Rand在0-10之间,它将显示死亡盘。如果rand在90-100之间,则会出现kingdisk。我想实现的是,这些磁盘不会连续出现两次。我尝试了布尔运算,但没有成功。除此之外,只有当“var”rand介于我提到的数字之间时,国王和死亡圆盘才会出现。有时它出现在兰特编号之外。我希望有人能帮我解决这个问题 一些信息: package { import flash.display.*; import flash.e
package {
import flash.display.*;
import flash.events.*;
import flash.display.*;
import flash.utils.*;
import flash.media.*;
public class DiskRoll extends MovieClip
{
//Vars
var diskTilt:Timer = new Timer(1350,1);
//var rand:int = Math.random() * 100;
var rand:int = (Math.random()*(100));
var deathDisk:Boolean = false;
var kinghDisk:Boolean = false;
//Sound Vars
var diskFxChannel:SoundChannel = new SoundChannel();
var diskHitFx:Sound = new diskHitsound();
var diskRollFx:Sound = new diskRollSound();
public function DiskRoll():void
{
this.addEventListener(MouseEvent.MOUSE_DOWN, hitDisk);
diskTilt.addEventListener(TimerEvent.TIMER_COMPLETE, tiltOnComplete);
diskFxChannel = diskRollFx.play();
}
//Disk hit function
private function hitDisk(event:MouseEvent):void{
//Picks random frame after MOUSE_DOWN from Disks Mc [1-8 Frames total]
this.gotoAndStop(Math.ceil(Math.random()* 6));
//Genarate random number calc chances and luck
rand = (Math.random() * (100));
//Disk of death between Random number (block second time)
if(rand >= 90 && rand <=100){
this.gotoAndStop(7);
kinghDisk = true;
}
if(rand >= 0 && rand <=10){
this.gotoAndStop(8);
deathDisk = true;
}
//Disk of death between Random number (block second time)
if(deathDisk == true){
rand = (Math.random() * (100))+11;
}
if(deathDisk == false){
rand = (Math.random() * (100));
}
//KingsDisk Random between number (block second time)
if(kinghDisk == true){
rand = (Math.random() * (89));
}
if(kinghDisk == false){
rand = (Math.random() * (100));
}
//If statements per Disk
if(this.currentFrame == 1){
trace("DiskRoll 1")
deathDisk = false;
kinghDisk = false;
}
if(this.currentFrame == 2){
trace("DiskRoll 2")
deathDisk = false;
kinghDisk = false;
}
if(this.currentFrame == 3){
trace("DiskRoll 3")
deathDisk = false;
kinghDisk = false;
}
if(this.currentFrame == 4 /*&& stage.getChildByName("block") == null*/){
trace("DiskRoll 4")
deathDisk = false;
kinghDisk = false;
}
if(this.currentFrame == 5){
trace("DiskRoll 5")
deathDisk = false;
kinghDisk = false;
}
if(this.currentFrame == 6){
trace("DiskRoll 6")
deathDisk = false;
kinghDisk = false;
}
if(this.currentFrame == 7){
trace("DiskRoll 7")
deathDisk = false;
kinghDisk = true;
}
if(this.currentFrame == 8){
trace("DiskRoll 8")
deathDisk = true;
kinghDisk = false;
}
trace(rand);
trace(deathDisk);
trace(kinghDisk);
diskFxChannel = diskHitFx.play();
this.removeEventListener(MouseEvent.MOUSE_DOWN, hitDisk);
diskTilt.start();
}
//Deblock Disk (button) Timer
private function tiltOnComplete(event:TimerEvent):void {
this.gotoAndPlay(1);
diskTilt.stop();
this.addEventListener(MouseEvent.MOUSE_DOWN, hitDisk);
diskFxChannel = diskRollFx.play();
}
}
}
磁盘是一个MC和一个按钮。这个MC磁盘有8个帧,其中1-6个是普通磁盘,7&8个是国王和死亡磁盘。您可以将磁盘与骰子进行比较。当播放器按下磁盘Movieclip时,将选择一个随机帧
diskRoll[class]:
package {
import flash.display.*;
import flash.events.*;
import flash.display.*;
import flash.utils.*;
import flash.media.*;
public class DiskRoll extends MovieClip
{
//Vars
var diskTilt:Timer = new Timer(1350,1);
//var rand:int = Math.random() * 100;
var rand:int = (Math.random()*(100));
var deathDisk:Boolean = false;
var kinghDisk:Boolean = false;
//Sound Vars
var diskFxChannel:SoundChannel = new SoundChannel();
var diskHitFx:Sound = new diskHitsound();
var diskRollFx:Sound = new diskRollSound();
public function DiskRoll():void
{
this.addEventListener(MouseEvent.MOUSE_DOWN, hitDisk);
diskTilt.addEventListener(TimerEvent.TIMER_COMPLETE, tiltOnComplete);
diskFxChannel = diskRollFx.play();
}
//Disk hit function
private function hitDisk(event:MouseEvent):void{
//Picks random frame after MOUSE_DOWN from Disks Mc [1-8 Frames total]
this.gotoAndStop(Math.ceil(Math.random()* 6));
//Genarate random number calc chances and luck
rand = (Math.random() * (100));
//Disk of death between Random number (block second time)
if(rand >= 90 && rand <=100){
this.gotoAndStop(7);
kinghDisk = true;
}
if(rand >= 0 && rand <=10){
this.gotoAndStop(8);
deathDisk = true;
}
//Disk of death between Random number (block second time)
if(deathDisk == true){
rand = (Math.random() * (100))+11;
}
if(deathDisk == false){
rand = (Math.random() * (100));
}
//KingsDisk Random between number (block second time)
if(kinghDisk == true){
rand = (Math.random() * (89));
}
if(kinghDisk == false){
rand = (Math.random() * (100));
}
//If statements per Disk
if(this.currentFrame == 1){
trace("DiskRoll 1")
deathDisk = false;
kinghDisk = false;
}
if(this.currentFrame == 2){
trace("DiskRoll 2")
deathDisk = false;
kinghDisk = false;
}
if(this.currentFrame == 3){
trace("DiskRoll 3")
deathDisk = false;
kinghDisk = false;
}
if(this.currentFrame == 4 /*&& stage.getChildByName("block") == null*/){
trace("DiskRoll 4")
deathDisk = false;
kinghDisk = false;
}
if(this.currentFrame == 5){
trace("DiskRoll 5")
deathDisk = false;
kinghDisk = false;
}
if(this.currentFrame == 6){
trace("DiskRoll 6")
deathDisk = false;
kinghDisk = false;
}
if(this.currentFrame == 7){
trace("DiskRoll 7")
deathDisk = false;
kinghDisk = true;
}
if(this.currentFrame == 8){
trace("DiskRoll 8")
deathDisk = true;
kinghDisk = false;
}
trace(rand);
trace(deathDisk);
trace(kinghDisk);
diskFxChannel = diskHitFx.play();
this.removeEventListener(MouseEvent.MOUSE_DOWN, hitDisk);
diskTilt.start();
}
//Deblock Disk (button) Timer
private function tiltOnComplete(event:TimerEvent):void {
this.gotoAndPlay(1);
diskTilt.stop();
this.addEventListener(MouseEvent.MOUSE_DOWN, hitDisk);
diskFxChannel = diskRollFx.play();
}
}
}
包{
导入flash.display.*;
导入flash.events.*;
导入flash.display.*;
导入flash.utils。*;
导入flash.media.*;
公共类DiskRoll扩展了MovieClip
{
//瓦尔斯
var diskTilt:定时器=新定时器(1350,1);
//var rand:int=Math.random()*100;
var rand:int=(Math.random()*(100));
var deathDisk:布尔值=false;
var kinghDisk:Boolean=false;
//音箱
var diskFxChannel:SoundChannel=新的SoundChannel();
var diskHitFx:Sound=new diskHitsound();
var diskRollFx:Sound=new diskRollSound();
公共函数DiskRoll():void
{
this.addEventListener(MouseEvent.MOUSE_DOWN,hitDisk);
diskTilt.addEventListener(TimerEvent.TIMER\u COMPLETE,tiltOnComplete);
diskFxChannel=diskRollFx.play();
}
//磁盘命中功能
私有函数hitDisk(事件:MouseeEvent):无效{
//在鼠标从磁盘Mc向下移动后拾取随机帧[1-8帧总数]
this.gotoAndStop(Math.ceil(Math.random()*6));
//生成随机数计算机会和运气
rand=(Math.random()*(100));
//随机数之间的死亡盘(第二次阻塞)
如果(rand>=90&&rand=0&&rand那么。如果我试着用A和B解释得更清楚一些。
您希望在10%的情况下显示。
您希望B在80%的情况下出现。
您希望C在10%的情况下出现。
你永远不想得到AA、CC或AC
现在,用元素A和C制作一个数组,这是最终数组的20%。通过应用排序函数(其条件为Math.random()<0.5)对其进行洗牌
现在,在每2个元素之间插入1个元素B。您应该有足够的空间从最终阵列的80%开始循环。这将确保没有两个磁盘是连续的
现在,不管你想在哪里插入其余的B,这都无关紧要。当然,可以随机插入。只需Math.random()*temporaryArray.length在数组中获得一个随机索引,将其插入到数组中
如果需要任何问题或澄清,请回答:)
编辑
//used some string to identify them. you use your instances
var deathDisk : String = "death";
var kingDisk : String = "king";
var normalDisk : String = "normal";
//Any nr of total disks. I reserve 10% of death and 10% of king. The rest are normal.
var totalNrOfDisks : Number = 40;
var nrOfDeath : uint = totalNrOfDisks * 10 / 100;
var nrOfKing : uint = totalNrOfDisks * 10 / 100;
//Generate all kings and deaths.
var kingAndDeath : Array = [];
for( var i : int = 0; i < nrOfDeath; i++ )
{
kingAndDeath.push( deathDisk );
}
for( i = 0; i < nrOfKing; i++ )
{
kingAndDeath.push( kingDisk );
}
//shuffle them
kingAndDeath.sort( function( element0:Number, element1:Number ):Boolean
{
return Math.random() < 0.5;
});
//Put at least 1 normal between them.
var allArray : Array = [];
for( i = 0; i < kingAndDeath.length; i++ )
{
allArray.push( normalDisk );
allArray.push( kingAndDeath[ i ] );
}
//While there is room for normals (max nr of disks not attained), insert one at a random spot in the array.
while( allArray.length < totalNrOfDisks )
{
var randomIndex : uint = Math.random() * allArray.length;
allArray.splice( randomIndex, 0, normalDisk );
}
trace( allArray );
//使用了一些字符串来标识它们。您可以使用实例
var death disk:String=“death”;
var kingDisk:String=“king”;
var normalDisk:String=“normal”;
//任何数量的总磁盘。我保留10%的死亡和10%的国王。其余都是正常的。
var totalNrOfDisks:数字=40;
var nrOfDeath:uint=总nrofdisks*10/100;
var nrOfKing:uint=总nRofDisks*10/100;
//产生所有的国王和死亡。
var kingAndDeath:Array=[];
对于(变量i:int=0;i
澄清一下就好了。你能举个例子吗。Thanks@user1492440好了,朋友:D非常感谢你的反馈/投票/回答你最棒的周围没有什么能让你失望的了!!!:D,非常感谢你,你一定对自己感觉很好。你今天帮助了一些人!!!非常感谢!!!