Hi,
we’ve created an demo example which shows our problem with EntityBaseDraggable. Here’s the code:
BoxPreview.qml
import QtQuick 1.1
import VPlay 1.0
import Box2D 1.0
BuildEntityButton {
id: ballPreview
toCreateEntityType: "Box.qml"
width: 20
height: 20
property int shapeWidth: 20
property int shapeHeight: 20
creationProperties: {
"sWidth": shapeWidth,
"sHeight": shapeHeight,
"isPlaced": true
}
onEntityPressed: {
createdEntity.isPlaced = false;
}
onVisibleChanged: {
if(!visible) {
createdEntity.visible = false;
createdEntity.preventFromRemovalFromEntityManager = false;
}
}
Rectangle {
height: 20
width: 20
color: "yellow"
anchors.fill: parent
}
}
Box.qml
// import QtQuick 1.0 // to target S60 5th Edition or Maemo 5
import QtQuick 1.1
import VPlay 1.0
import Box2D 1.0
EntityBaseDraggable {
id: box
entityType: "box"
colliderComponent: boxCollider
selectionMouseArea.anchors.fill: rect
gridSize: 1
height: 20
width: 20
dragOffset: Qt.point(0,0)
allowedToBuild: true
property alias sWidth: rect.width
property alias sHeight: rect.height
property bool isPlaced: false
showRectangleWhenBuildingNotAllowed: false
preventFromRemovalFromEntityManager: false
Rectangle {
id: rect
width: 30
height: 30
color: "yellow"
}
BoxCollider {
id: boxCollider
anchors.fill:rect
density:100
friction: 1.6
restitution: 0
fixture.onBeginContact: {
if(!isPlaced) {
rect.color = "red";
allowedToBuild = false;
}
}
fixture.onEndContact: {
rect.color = "yellow"
allowedToBuild = true
}
}
}
main.qml
import VPlay 1.0
import Box2D 1.0
import QtQuick 1.1
GameWindow {
id: window
// the size of the Window can be changed at runtime by pressing the number keys 1-6 with QML window active
// the content of the logical scene size (480x320) gets scaled to the window size based on the scaleMode
width: 960
height: 640
EntityManager {
id: entityManager
entityContainer: scene
}
Button {
id: restartButton
text: "Restart"
width: 200
height: 80
anchors.centerIn: parent
visible: false
z:1
onClicked: {
entityManager.removeAllEntities();
visible = false
}
}
Scene {
id: scene
Row {
spacing: 5
anchors {
top: parent.top
horizontalCenter: parent.horizontalCenter
}
BoxPreview{shapeHeight: 50; shapeWidth: 50}
BoxPreview{shapeHeight: 50; shapeWidth: 50}
BoxPreview{shapeHeight: 50; shapeWidth: 50}
}
// platform (here you can place shapes)
Rectangle {
width: 300
height: 30
anchors.centerIn: parent
color: "blue"
BoxCollider {
anchors.fill: parent
bodyType: Body.Static
}
}
// ground (if shape falls on ground, game is over)
Rectangle {
width: parent.width
height: 5
color: "grey"
anchors.bottom: parent.bottom
BoxCollider {
anchors.fill: parent
bodyType: Body.Static
fixture.onBeginContact: {
restartButton.visible = true;
}
}
}
PhysicsWorld {
id: physicsWorld
gravity.y: -9.81
z: 10
updatesPerSecondForPhysics: 60
velocityIterations: 5
positionIterations: 5
}
}
}
The problem are the two methods “fixture.onBeginContact” and “fixture.onEndContact”. The entities are always allowed to build and the color does not change if it collides with an other entity. As I remember this worked fine with version 1.3.0, were there any API changes we’ve missed?
Cheers!