我正在编写一个简单的游戏,其中包含Player
对象和Enemy
对象。我希望Enemy
追求Player
,但我不知道将当前Player
的位置传递给Enemy
的正确方法是什么。
本地化我是C ++ dev所以我自然而然地想把Player
(可能作为一个接口)传递给Enemy
,但我在QML中找不到任何关于这种方法的线索。
那我该怎么办呢?
答案 0 :(得分:2)
嗯,最好的方法是使用像hyde
这样的属性绑定已经指出过。
// Enemy.qml
Item {
property int targetX
property int targetY
// more code
}
// Player.qml
Item {
property int currentPosX
property int currentPosY
}
// Main.qml
Enemy {
id: enemy
targetX: player.currentPosX
targetY: player.currentPosY
}
Player {
id: player
// Some calculation for the current x and y position
}
另一种方法是将Player
组件传递给Enemy
组件。但是比你有点耦合。这可能是你指出的C ++思想。
// Enemy.qml
Item {
id: enemy
property Item myPlayer
Component.onCompleted: {
console.log(enemy.myPlayer.currentPosX +
" | " +
enemy.myPlayer.currentPosY)
}
}
// Player.qml
Item {
property int currentPosX
property int currentPosY
}
// Main.qml
Enemy {
id: enemy
myPlayer: player
}
Player {
id: player
// Some calculation for the current x and y position
}
答案 1 :(得分:1)
广告提及here:
JavaScript表达式允许QML代码包含应用程序逻辑。
此外:
QML提供了一种高度可读,声明性,类JSON语法,支持命令式JavaScript表达式和动态属性绑定。
正因为如此,你在QML环境中没有指针的概念,除非你把你的逻辑推到底层,用C ++编写。
无论如何,JavaScript中的几乎所有东西都是通过引用传递的(这对于你的情况来说是可接受的简化,还有一些例外,例如原始值和不可变对象)。
因此,您可以让A
的实例引用B
的实例,方法是将其传递到构造函数或通过以下方式设置它: setter 或其他(确实有很多替代解决方案)。
请记住,在JavaScript和QML中都没有对 interfaces 的明确支持,所以你不能依赖它们,即使你可以模拟它们(它不值得)从我的观点来看)。
如何解决您的具体问题? 嗯,这取决于你的实际代码和软件架构,所以我不能说,我很抱歉。我希望上面的一个提示对你有任何帮助。