修改SWF马里奥游戏:替换火球为锤子后仅向右发射的调试求助
解决马里奥SWF游戏锤子仅能向右发射的问题
嘿,我瞅了下你贴的代码,发现问题出在锤子的移动方向逻辑缺失上——你只调整了锤子生成时的X坐标,但没给锤子本身设置向左移动的动力!
问题分析
你当前的代码里,只根据lr变量调整了锤子的生成位置:
_loc3_._x = _X + (lr >= 0?17:-7);
这一步只是让锤子在马里奥左侧/右侧生成,但锤子的移动方向完全没跟着lr走,所以不管生成在左边还是右边,它只会按默认逻辑向右飞。
修复步骤
给锤子添加方向速度参数
在生成锤子的代码块末尾,加上根据lr设置移动速度的代码:// 根据马里奥的朝向设置锤子移动速度,数值可以根据手感调整 _loc3_.moveSpeed = lr >= 0 ? 7 : -7;给锤子影片剪辑添加移动逻辑
打开你导入的hammer影片剪辑,在它的时间轴第一帧添加帧脚本,让锤子每一帧都根据moveSpeed移动:onClipEvent(enterFrame) { // 按设置的速度移动 this._x += this.moveSpeed; // 超出屏幕自动销毁,避免内存堆积 if (this._x < -30 || this._x > _root._width + 30) { this.removeMovieClip(); } }修复代码里的变量重复声明问题
你代码里重复声明了_loc3_变量,容易出问题,建议改成:var _loc3_ = _root.level.getNextHighestDepth(); var hammer = _root.level.attachMovie("hammer","Enemy" + _loc3_,_loc3_); hammer._y = _Y; hammer._x = _X + (lr >= 0?17:-7); hammer.moveSpeed = lr >= 0 ? 7 : -7;用
hammer变量代替重复的_loc3_,代码可读性更高。
这样调整后,锤子就能根据马里奥的朝向(lr变量)向左或向右发射啦!
内容的提问来源于stack exchange,提问作者yolo




