如何随机化MovieClip coinblock1的帧并更新玩家金币变量
问题解决:MovieClip随机帧与金币对应实现
先给你指出现有代码里的核心问题:
Math.random() * coinblock1.totalFrames得到的是0到6之间的浮点数,不是整数帧号,直接和整数判断永远匹配不上- 变量定义的是
random1,但判断时用的是random,变量名完全不一致 - 多层if嵌套冗余,代码可读性差
正确实现方案
- 生成合法随机帧号:用
Math.floor()取整后加1,确保得到1-6的整数(MovieClip帧号从1开始) - 用数组映射帧与金币关系:把对应金币值按帧号顺序存入数组,直接通过帧号索引取值,省去大量重复if判断
- 简化逻辑流程:先确定随机帧,再统一处理金币更新、帧跳转、音效播放
修正后的完整代码
if(coinblock1.hitTestObject(blowfishPong)) { if (ballSpeedXCoinGame > 0) { ballSpeedXCoinGame *= -1; ballSpeedYCoinGame = calculateBallAngleCoinGame(character.y, blowfishPong.y); // 生成1到6的随机整数帧号 var randomFrame:uint = Math.floor(Math.random() * coinblock1.totalFrames) + 1; // 帧号对应金币的映射数组(索引0对应帧1,以此类推) var coinValues:Array = [0, 1, 5, 10, 50, 100]; var addCoins:uint = coinValues[randomFrame - 1]; // 执行帧跳转与对应逻辑 coinblock1.gotoAndStop(randomFrame); if (addCoins == 0) { Bump.play(); } else { Coins += addCoins; updateTextFieldsCoinGame(); CoinSFX.play(); } } }
关键细节说明
Math.floor(Math.random() * 6) + 1:Math.random()返回0-1的浮点数,乘6后范围是0-6,Math.floor()取整为0-5,加1后正好得到1-6的合法帧号- 数组
coinValues的索引与帧号一一对应,通过randomFrame - 1直接获取当前帧对应的金币数,彻底替代冗余的if判断 - 逻辑分层清晰:先处理物理反弹,再生成随机帧,最后根据金币值执行对应操作,维护性更强
内容的提问来源于stack exchange,提问作者Isaac Yeap Jie Ling
相关产品推荐
相关产品推荐

