为什么物体互相夹住?

问题描述

我正在制作一个脚本,该脚本通过对y变量进行优先级排序来对对象的深度进行排序,但随后再检查是否彼此接触的对象的深度越深,它们就越靠右。由于某些原因,最后一部分无法正常工作。

这是代码

ds_grid_sort(_dg,1,true);

_yy = 0;

repeat _inst_num
{
    _inst = _dg[# 0,_yy];
    with _inst
    {
        with other
        {
            if (x > _inst.x and y = _inst.y)
            {
                _inst.depth = depth + building_space;
            }
        }
    
    }
    _yy++;
}

我已经确定问题是,当游戏检查y = _inst.y语句的
_inst部分时,没有什么是正确的,但是看到这没有任何意义。它们如何在相同的y坐标上。有人可以告诉我我在做什么错吗?

解决方法

正如史蒂文(Steven)所述,优良作法是使用双等号进行比较(y == _inst.y),并使用单个等号进行赋值(_yy = 0;),但是GML不在乎是否使用单个等于用于比较的符号,因此不会引起您的问题。尽管除了GML以外,它几乎与其他所有语言都很重要。

据我了解,问题似乎在于您使用other。当您使用代码with other时,它不会遍历所有其他对象,只会捕获一个实例。您可以通过运行以下代码并查看其显示多少调试消息来对其进行测试:

...
        with other
        {
        show_debug_message("X: "+string(x)+"; Y: "+string(y));
...

您可以使用with all。这将遍历所有对象或with object,其中object是对象或父对象。这将遍历该对象的所有实例。但是,这两个函数都不检查对象是否重叠(仅对所有对象进行迭代),因此您必须检查碰撞。您可以执行以下操作:

...
        with all
        {
            if place_meeting(x,y,other)
            {
                if (x > _inst.x and y = _inst.y)
                {
                    _inst.depth = depth + building_space;
                }
            }
...

我不知道您其余的代码是什么样子,但是可能会有更简单的方法来实现您的目标。是否可以同时基于x和y变量设置深度?诸如depth = -x-y;之类的东西? 对于不熟悉GameMaker的人,深度值较小的对象绘制在深度值较高的对象上方;这就是为什么我建议将深度设置为-x-y下面是该网格的视图(第一行和第一列是x和y变量;其他数字是该位置的物体):

enter image description here

让所有事物都起作用的方程式也会使之成为现实,因此,如果您有任何东西在移动(例如播放器),您可以轻松有效地更新其深度,从而能够相对于所有其他对象正确显示它们。

,

我认为应该是y == _inst.y。 但是我不确定GML是否倾向于接受这种格式。

在使用条件时使用==检查它们是否相等是一种更好的做法。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...