AS3技术求助:如何在横版卷轴游戏中并排添加不同宽度的平台影片剪辑?
嘿,Nathan!很高兴能帮你搞定这个横版卷轴游戏里的平台重叠问题😉
首先得给你点个赞——把Platform的注册点设为右侧这个思路其实很聪明,刚好方便我们跟踪平台的右边缘位置,但问题出在循环里的坐标计算没跟上不同平台的宽度差异。咱们一步步来解决:
核心问题分析
你现在的循环应该是直接把新平台的x设为前一个平台的x(也就是前一个的右边缘),但因为新平台有自己的宽度,它的左边缘其实是新平台x - 新平台宽度,这就会导致新平台的左边缘跑到前一个平台的右边缘左边,自然就重叠了。
解决方案:跟踪右边缘+动态计算坐标
我们只需要维护一个变量记录上一个平台的右边缘坐标(也就是前一个平台的x值,因为注册点在右),然后给每个新平台计算出刚好贴合前一个平台的x坐标就行:
代码示例(以ActionScript 3为例)
// 初始化:第一个平台的右边缘位置(假设第一个平台你已经放在了x=100的位置) var lastPlatformRight:Number = 100; // 循环创建5个不同宽度的平台 for (var i:int = 0; i < 5; i++) { // 从库中实例化Platform(记得库中要把影片剪辑的类名设为Platform) var newPlatform:Platform = new Platform(); // 模拟不同宽度的平台(你可以替换成自己的宽度逻辑) newPlatform.width = Math.random() * 100 + 50; // 宽度在50-150之间随机 // 关键计算:让新平台的左边缘刚好对齐上一个平台的右边缘 // 因为注册点在右,新平台的左边缘 = newPlatform.x - newPlatform.width // 我们要让这个左边缘等于lastPlatformRight,所以推导得: newPlatform.x = lastPlatformRight + newPlatform.width; // 设置y坐标,比如固定在舞台底部 newPlatform.y = stage.stageHeight - newPlatform.height; // 添加到舞台 stage.addChild(newPlatform); // 更新右边缘记录为当前平台的右边缘(也就是它的x值) lastPlatformRight = newPlatform.x; }
额外注意事项
- 确保你能正确获取到每个Platform的
width值:如果是从库中创建的静态影片剪辑,实例化后width就是准确的;如果是动态生成内容的平台,可能需要等它渲染完成后再获取宽度。 - 测试的时候可以给每个平台填充不同的颜色,这样一眼就能看出有没有重叠或者空隙。
- 如果是滚动加载平台,只需要在每次加载新平台时,用当前最右侧平台的x值作为
lastPlatformRight就行,逻辑完全一致。
这样改完之后,不管平台宽度怎么变,它们都会乖乖地一个接一个排列,再也不会重叠啦!
内容的提问来源于stack exchange,提问作者Nathan
相关产品推荐
相关产品推荐

