游戏制造者:在地面上的随机位置创建一个敌人

时间:2016-02-07 15:31:32

标签: game-maker gml

我对编码有一些了解(在Python,C和XHTML中),我正在尝试理解Game Maker的基础知识。我创造了一个房间,敌人在移动,碰撞到墙壁和所有,但现在,我想在房间里随机产生,只要它们在地面上。现在,它只适用于我随机生成它们。

以下是我在obj_enemy的Create事件中添加的代码,但显然有些东西无效,因为它根本不会产生任何敌人。

此外,不知道这是否重要,但如果我还没有在房间里放置obj_enemy,他们也不会产生......

// INIT //
dir = -1;      // direction
movespeed = 3; // movement speed
hsp = 0;       // horizontal speed
vsp = 0;       // vertical speed
grav = 0.5;    // gravity

// CREATE //
// Find a random X position in the room
var randx = random(room_width);
// Find a random Y position in the room
var randy = random(room_height);

// If the random position is empty
if position_empty (randx, randy)
{
    // If there is a block
    // 16 pixels under
    // the random Y position
    // (the sprite of obj_enemy is 32x32 pixels)
    if place_meeting (randx, randy+16, obj_block01)
    {
        // If there is less than 4 ennemies
        if instance_number (obj_ennemy) <= 4
        {
            // Create an ennemy
            instance_create(randx, randy, obj_ennemy);
        }
    }
}

My room

1 个答案:

答案 0 :(得分:1)

这是obj_enemy的创建事件。如果房间里没有obj_enemy,那么这段代码将永远无法运行!

你要么需要从房间里的至少一个敌人开始,要么创建一个控制器对象来负责制造你放入房间的敌人(我推荐这种方法)。

即使代码确实运行,那么在正确位置产生敌人的可能性非常小,因此您必须在看到它之前多次运行该程序。为了避免这种情况,只需将生成的代码放入一个真正的循环中,并在生成4个敌人时将其从中断:

while (instance_number (obj_ennemy) <= 4)
{
// Find a random X position in the room
var randx = random(room_width);
// Find a random Y position in the room
var randy = random(room_height);

// If the random position is empty
if position_empty (randx, randy)
{
    // If there is a block
    // 16 pixels under
    // the random Y position
    // (the sprite of obj_enemy is 32x32 pixels)
    if place_meeting (randx, randy+16, obj_block01)
    {

       // Create an ennemy
       instance_create(randx, randy, obj_ennemy);
     }

}
}