Corona / Lua功能范围

时间:2012-02-14 21:35:07

标签: lua corona

我是Corona的新手。我不知道如何解决这个问题。

主要是我创造了2个本地物体,玩家和敌人。

Player有一个名为takeDamage的函数。

当我尝试从敌人手中调用player.takeDamage时,它无法看到该功能。

我认为这是因为主要拥有两个对象并且彼此不了解。

我如何让敌人调用该功能以便它可以对玩家造成伤害?

main.lua包含:

-- Create player character
local player = require("player");
player = player.new();

-- Create enemy character
local enemy = require("enemy");
enemy = enemy.new();

我认为我可以让玩家全球化,但据我所知,这不是最佳做法。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

如果可以安全地假设只有一个“播放器”实例,那么可以使其全局化。否则,你将不得不沿着这些方向做点什么:

-- main.lua
local player = require 'player'.new()
local enemy = require 'enemy'.new()
enemy:setPlayer(player)

-- enemy.lua
...
function enemy:setPlayer(player)
  self.player = player
end

然后在敌人代码中使用self.player来引用玩家。请注意,这将消耗内存,因为播放器引用将被复制到每个敌人实例。

一方面注意,我认为调用模块和实例是相同的,即player。如果您的意思是模块或实例,将在后面变得不清楚。一种安全的方法是将模块称为PlayerEnemy,代码如下所示:

Player = require 'Player'
local player = Player.new()

答案 1 :(得分:1)

理想情况下,您不希望玩家直接引用敌人或引用玩家的敌人。相反,您可以在游戏循环中轮询每个参与者并根据结果更新游戏状态。

local player = make_player()
local enemy = make_enemy()

--game loop - in a real game this isn't a busy while
while true do

    local move = player.move()
    local result = validate_move(move)
    if result.is_valid then 
        update_position(player, result) 
    end

    move = enemy.move()
    result = validate_move(move)
    if result.is_valid then 
        update_position(enemy, result) 
    end

    local attack = player.attack()
    local attack_result = validate_attack(attack)
    if attack_result.hit then 
        update_health(enemy, attack_result) 
    end

    -- more game logic here

    render(player)
    render(enemy)
end

在真实游戏中,状态变化将由events - 触摸事件,drawing events等驱动。我的繁忙循环(while true do)说明了一般概念。

你还必须利用自己的想象力来实现缺失。

有很多方法可以模拟游戏。我并不是说这是最好的。但是,它确实显示了一种解耦相互作用元素的方法。