我是新手,刚开始使用GameMaker,第一次在这个论坛发帖。基本上,我在寻找一种简洁的 Melee 攻击系统,我的小脑袋能够理解。虽然我不是在制作打击游戏,但我的作品受到它们的启发,所以我想要能够有不同的攻击类型,有轻、重和中等版本。
我已经查找了各种教程,但遗憾的是,找到的教程都很老,信息已经过时了。虽然我尝试了多个教程,但遇到的问题都一样。最后,我找到了一个最近的教程,内容还算清晰,所以我想如果能得到一些帮助,就可以让它工作了。所以我来这里求助了。
以下是我的脚本(命名为“States”)
function State (_sprite) {
constructor {
sprite = _sprite;
stateonend = undefined;
static Stateonend = function (_state) {
stateonend = _state;
}
function State_set (_state) {
if (state == _state) return;
state = _state;
sprite_index = state.sprite;
image_index = 0;
}
}
}
我的代码在玩家对象的创建事件中:
facing = 1;
hp = 100;
hp_total = hp;
damage = 20;
// states
states = {
idle : new State (idle_sheet),
run : new State (Vi_run),
Rheavattk : new State (RVi_heav)
}
states.Rheavattk.Stateonend(states.idle);
// set initial state
state = states.idle;
我的代码在玩家对象的步进事件中:
// movement controls
if (state == states.idle || state == states.run){
if (keyboard_check(vk_left)) {
State_set(states.run);
x -= 9;
} else if (keyboard_check(vk_right)) {
State_set(states.run);
x += 9;
} else {
State_set(states.idle);
}
if keyboard_check_pressed (vk_right){
facing = abs(facing);
}
if keyboard_check_pressed (vk_left){
facing = -abs(facing);
}
// combat controls
if keyboard_check_pressed(ord("W")){
State_set(state.Rheavattk);
}
}
我遇到的问题是代码报错“Variable oplayer.State_set - not set before reading it”,我尝试了很多方法,但还是没能解决这个问题。错误提示是在 'State_set(states.idle);' 这一行出现的。看起来我在创建事件中已经设置了 state = states.idle,但是它还是报错。
我希望有人能帮助我解决这个问题,或者提供更好的方法来实现 Melee 攻击系统。
评论 (0)