OverviewFelgo 1 Support › fixture.onContactEnd is called while object collides with other shape


Viewing 6 posts - 1 through 6 (of 6 total)
  • Author
  • #4452


    We have an issue with the onContactEnd method. If I drag a shape and it collides with an other shape, everthing works fine but if i drag it first into a shape and then drag it into an other shape the onContactEnd method is called anyway but the dragged shape collides already with an other shape.


    This is our used code:

    fixture.onContactChanged: {
                if(!isPlaced) {
                    boxImage.source = "../../img/box_notAllowed.png"; allowedToBuild = false;}}
            fixture.onEndContact:  {
                boxImage.source = "../../img/box.png"; allowedToBuild = true}


    Also two screenshots:

    First collide with platform: (everthing is fine)

    Then take new shape and drag it first into the platform and then up into the other shape (onContactEnd is called and you can place the shape)


    Felgo Team

    Hi GP, could you please post a full minimal QML demo that shows this problem in more detail?

    Cheers, Chris



    Now here is a little demo project with the same issue:


    EntityBaseDraggable {
        id: box
        entityType: "rectangle"
        entityId: "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
        Rectangle {
            id: rect
            width: 30
            height: 30
            color: "yellow"
        BoxCollider {
            id: boxCollider
            friction: 1.6
            restitution: 0
            fixture.onBeginContact: {
                if(!isPlaced) {
                    rect.color = "red"; allowedToBuild = false;}}
            fixture.onEndContact:  {
                rect.color = "yellow"; allowedToBuild = true}



    BuildEntityButton {
        id: ballPreview
        toCreateEntityType: "Box.qml"
        width: 20
        height: 20
        property int shapeWidth: 20
        property int shapeHeight: 20
        creationProperties: {
            "sWidth": shapeWidth,
            "sHeight": shapeHeight,
        onEntityPressed: {
             createdEntity.isPlaced = false;
        Rectangle {
            height: 20
            width: 20
            color: "yellow"
            anchors.fill: parent



    import VPlay 1.0
    import Box2D 1.0
    import QtQuick 1.1
    GameWindow {
        activeScene: scene
        // 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
        Scene {
            id: scene
            Row {
                spacing: 5
                anchors {
                    horizontalCenter: parent.horizontalCenter
                BoxPreview{shapeHeight: 50; shapeWidth: 50}
                BoxPreview{shapeHeight: 50; shapeWidth: 50}
                BoxPreview{shapeHeight: 50; shapeWidth: 50}
            Rectangle {
                width: 150
                height: 20
                color: "grey"
                BoxCollider {
                    anchors.fill: parent
                    bodyType: Body.Static
            PhysicsWorld {
                id: physicsWorld
                gravity.y: -9.81
                z: 10
                updatesPerSecondForPhysics: 60
                velocityIterations: 5
                positionIterations: 5




    When i understand you right, you would like to place your entity, when it hasn´t any contact with another entity. I solved a similar problem by adding a counter, that gets incremented in the onBeginContact handler and decremented in the onContactEnd handler. When the counter reaches 0, you can place your entity.
    Something like this:

      property int ContactCounter: 0
      if (contactCounter===0)
    	rect.color = "yellow"; allowedToBuild = true;

    Hope this is what you meaned.



    Hey guybrush,


    thank your very much, that was exactly what i needed. I’ve tried the same thing with __collidingObstacles but this doesn’t work. Thanks again! 😉


    Felgo Team

    Great you found a solution! Thanks Guybrush for helping!

Viewing 6 posts - 1 through 6 (of 6 total)

RSS feed for this thread

You must be logged in to reply to this topic.

Voted #1 for:

  • Easiest to learn
  • Most time saving
  • Best support

Develop Cross-Platform Apps and Games 50% Faster!

  • Voted the best supported, most time-saving and easiest to learn cross-platform development tool
  • Based on the Qt framework, with native performance and appearance on all platforms including iOS and Android
  • Offers a variety of plugins to monetize, analyze and engage users
create apps
create games
cross platform
native performance
3rd party services
game network
level editor
easiest to learn
biggest time saving
best support