我是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();
我认为我可以让玩家全球化,但据我所知,这不是最佳做法。
非常感谢任何帮助。
答案 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
。如果您的意思是模块或实例,将在后面变得不清楚。一种安全的方法是将模块称为Player
和Enemy
,代码如下所示:
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
)说明了一般概念。
你还必须利用自己的想象力来实现缺失。
有很多方法可以模拟游戏。我并不是说这是最好的。但是,它确实显示了一种解耦相互作用元素的方法。