大家好,

我一直正在跟随 Sara Spalding 的 Arpg教程,每一步都在不断进展,我刚刚完成了第 19 步。

但是,我遇到了一个问题:当我用空格键激活攻击时,景深会变得很怪异,还有我的玩家对象会突然浮现在其他不可触摸的对象上面(这些对象都在一个叫做obj_entity_parent的管理器下)。

如果你有任何帮助意见,我会非常感激!

以下是所有与景深和攻击相关的代码:

玩家每次 step

//获取玩家输入

keyLeft = keyboard_check(ord("A"));

keyRight = keyboard_check(ord("D"));

keyUp = keyboard_check(ord("W"));

keyDown = keyboard_check(ord("S"));

keyActivate = keyboard_check_pressed(ord("E"));

keyAttack = keyboard_check_pressed(vk_space);

keyItem = keyboard_check_pressed(ord("I"));

inputDirection = point_direction(0, 0, keyRight - keyLeft, keyDown - keyUp);

inputMagnitude = (keyRight - keyLeft != 0) || (keyDown - keyUp != 0);

if (!global.gamePaused) script_execute(state);

depth = -bbox_bottom;

父实体的每次 step:

/// @ desc Entity Loop

if (!global.gamePaused)

{

    depth = -bbox_bottom;

}

flash = max(flash-0.04,0);

攻击计算 script

功能 CalcAttack(){

//利用攻击hitbox 并检查碰撞

mask_index = argument0;

var hitByAttackNow = ds_list_create();

var hits = instance_place_list(x, y, obj_entity_parent, hitByAttackNow, false);

if (hits > 0)

{

//如果这个实例没有被这个攻击击中过,此时击中它

for (var i = 0; i < hits; i++)

{

    //如果实例没有被此攻击击中过

    var hitID = hitByAttackNow[i];

    if (ds_list_find_index(hitByAttack, hitID) == -1)

    {

ds_list_add(hitByAttack, hitID);

with (hitID)

{

if (entityHitScript != -1) script_execute(entityHitScript);

}

        }

    }

}

ds_list_destroy(hitByAttackNow);

mask_index = spr_player;

}

攻击 slash 脚本

功能 AttackSlash(){

//攻击刚刚开始

if (sprite_index != spr_player_attack_slash)

{

    //设置正确的动画

sprite_index = spr_player_attack_slash;

localFrame = 0;

image_index = 0;

//清空 hit 列表

if (!ds_exists(hitByAttack, ds_type_list)) hitByAttack = ds_list_create();

ds_list_clear(hitByAttack);

}

CalcAttack(spr_player_attack_slash_HB);

//更新 sprite

PlayerAnimateSprite();

if (animationEnd)

{

state = PlayerStateFree;

animationEnd = false;

}

}

如果你需要更多代码,请随时问我。感谢帮助!