将指针/引用传递给对象

时间:2015-11-20 18:26:32

标签: qml qt5 qtquick2

我正在编写一个简单的游戏,其中包含Player对象和Enemy对象。我希望Enemy追求Player,但我不知道将当前Player的位置传递给Enemy的正确方法是什么。

本地化我是C ++ dev所以我自然而然地想把Player(可能作为一个接口)传递给Enemy,但我在QML中找不到任何关于这种方法的线索。

那我该怎么办呢?

2 个答案:

答案 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 的明确支持,所以你不能依赖它们,即使你可以模拟它们(它不值得)从我的观点来看)。

如何解决您的具体问题? 嗯,这取决于你的实际代码和软件架构,所以我不能说,我很抱歉。我希望上面的一个提示对你有任何帮助。