自学内容网 自学内容网

qml Friction详解

1、概述

Friction 是 Qt Quick 3D 中的一个 QML 类型,主要用于模拟物体与表面之间的摩擦力。摩擦力通常用于调整物体的运动状态,特别是模拟物体在某个表面上滑动时所产生的阻力。它可以与其他物理效果(如重力或吸引力)结合使用,以实现更加真实的物理模拟,特别在3D场景中的物理交互中,摩擦力的设置至关重要。

2、重要属性
  • friction

    • 类型:real
    • 描述:摩擦系数的数值,表示摩擦力的大小。默认值为 0.5,表示一定程度的摩擦力。值越大,摩擦越强,物体越难滑动。
  • velocity

    • 类型:Vector3
    • 描述:表示物体的速度。摩擦力会根据速度的大小和方向来调整物体的运动状态,通常速度越大,摩擦力越大。
  • enabled

    • 类型:bool
    • 描述:该属性决定是否启用摩擦效果。如果设置为 false,摩擦力将不作用于物体运动。
  • surfaceType

    • 类型:enum
    • 描述:指定摩擦力所应用的表面类型,影响摩擦系数的计算。不同的表面类型会有不同的摩擦效果。
3、重要方法
  • applyFriction()

    • 描述:此方法用于将摩擦力应用于物体的速度。通常通过 velocity 属性和 friction 属性计算摩擦力的大小,并修改物体的运动状态。
  • reset()

    • 描述:重置摩擦效果的所有属性,通常用于将摩擦力恢复到默认值,或者在物体状态重置时调用。
4、重要信号
  • frictionChanged

    • 类型:signal
    • 描述:当 friction 属性的值发生变化时触发此信号。常用于动态调整物体的摩擦力效果。
  • enabledChanged

    • 类型:signal
    • 描述:当 enabled 属性发生变化时触发此信号。它通知其他组件摩擦效果是否被启用或禁用。
  • velocityChanged

    • 类型:signal
    • 描述:当 velocity 属性发生变化时触发此信号。它通常用于监测物体的运动状态,并根据速度变化调整摩擦效果。
5、常用枚举类型
  • SurfaceType
    • 描述:此枚举定义了不同类型的表面,每种表面类型对应不同的摩擦系数。
      • Smooth: 平滑表面,通常具有较低的摩擦力。
      • Rough: 粗糙表面,通常具有较高的摩擦力。
      • Slippery: 光滑表面,摩擦力极低,物体会轻松滑动。
      • Sticky: 粘性表面,摩擦力非常高,物体移动非常困难。

Window {
    width: 480; height: 240
    visible: true

    Rectangle {
        id: root
        width: 480; height: 240
        color: "#1F1F1F"

        ParticleSystem {
            id: particleSystem
        }

        ImageParticle {
            source: "res/particle.png"
            system: particleSystem
            color: '#FFD700'
            colorVariation: 0.2
            rotation: 0
            rotationVariation: 45
            rotationVelocity: 15
            rotationVelocityVariation: 15
            entryEffect: ImageParticle.Scale
        }


        Emitter {
            id: emitter
            anchors.left: parent.left
            anchors.verticalCenter: parent.verticalCenter
            width: 1; height: 20
            system: particleSystem
            emitRate: 40
            lifeSpan: 6400
            lifeSpanVariation: 400
            size: 32
            velocity: AngleDirection {
                angle: 0
                angleVariation: 15
                magnitude: 100
                magnitudeVariation: 100
            }
        }


        // M1>>
        Friction {
            anchors.horizontalCenter: parent.horizontalCenter
            width: 240; height: 120
            system: particleSystem
            factor : 0.8
            threshold: 25
            Tracer {}
        }
        // <<M1


    }

}

觉得有帮助的话,打赏一下呗。。

           

需要商务合作(定制程序)的欢迎私信!! 


原文地址:https://blog.csdn.net/ckg3824278/article/details/145161013

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!