二者碰撞盒子:VIZARD:PYTHON

2024-06-26 00:19:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我用的是相撞的盒子,它们被放置在有两张桌子的环境中。我用鼠标光标抓取对象并放在另一个表中。但是在物体之间的碰撞检测中我面临一个问题。当物体和鼠标发生碰撞(最小距离)时,我使用了接近传感器,然后鼠标拾取/链接该物体。我也在使用相同的传感器进行碰撞,一些物理概念,在vizard bt盒的文件中给出,是相互碰撞的,但由于重力,它们正在飞行。我把密度,因为它是在文件bti不工作。然后我决定离开这个逻辑,尝试其他的方法,我试着形成两个接近点,一个是boxex碰撞,另一个是盒子和鼠标之间,但是盒子在飞。我用了类似的概念,板条箱是由vizard定义的,它在那里工作,而不是在块中。请给出一些解决这个问题的办法。这里我附加了这个功能-一个用于手动,另一个用于链接鼠标和块,最后放置块。在环境中我已经用了对撞板和对撞表。所以对于碰撞,我应该采用什么方法,因为当我在相同的接近传感器上工作时,它不会起作用。所有的物体都放在vizard的原点,然后手动设置在桌子上的平面位置

global hand
hand = viz.addChild( 'marker.wrl' )
#hand.collidebox()
#xa,ya,za=hand.getPosition()
#hand.collideBox()
hand.enable(viz.COLLIDE_NOTIFY)
#hand.density=0.0000001
#viz.phys.setGravity([0,-1,0])
#vizact.onkeydown(' ', viz.phys.enable)
hand.setPosition( [-7.5, 1.2, -10] )
hand.setEuler(0,0,0)
hand.setScale(0.3,0.3,0.3)
ViewLink = viz.link(hand,viz.MainView)
viz.link(hand,device)
ViewLink.preEuler( [0,25 ,0] )
ViewLink.preTrans( [0,0.2,-0.5] )

    def p_ball(e):

    #    print 'hit'
    #   global sound1 
    #   sound1.play()
        global bn
    #    grab = 1
    #    ball.addAction(blast

    #    b[z].addAction(blast)

        for i in range(len(b)):
        #global xh,zh
        xh,yh,zh=hand.getPosition()
   #        zh= (zh)
   #        print 'abcd'
        xb,yb,zb=b[i].getPosition()
        zb= (abs(zb))
        zh= (abs(zh))
        xb= (abs(xb))
        xh= (abs(xh))
        #print zh,zb

        if (abs(zh-zb)<.4 and abs(xh-xb)<.4):
   #            b[i].addAction(blast)
   #            b[i].visible(viz.OFF)


   #            b[i].visible(viz.ON)

            global link
            if bn==100:
                link = None
                link = viz.grab( hand, b[i] )
                #tool.grabAndHold()
                if link == True:
                    global Block1
                    Pos=Block1.getPosition(MODE=VIZ.REL_GLOBAL)

    #               else:
    #                       print 'aaaaaa'



                bn=i
            #UpdateMovement()
            #UpdateMovement()

            global k
            k=k+1
            tbox2.message(str(k))

/我在这里试过一些东西,但没用。这里我用接近传感器来检测箱子的碰撞。 xb11,yb11,zb11=b[0].getPosition() 打印xb11、yb11、zb11

^{pr2}$

/code对于blocks,我把它与plane/and tables的碰撞放在一起,而在地平面上,重力会把物体向下拉,所以我用tables来碰撞,把块放到/table上

^{3}$

/块1---------表1 全局块0

    Block0=viz.addChild('b2.osgb')

    #crate = viz.addChild('crate.osgb',pos=[-7.38,1.2,-3.9]) 
    #crate.visible(viz.OFF)
    #crate.collideBox(density=50000000000)
    #crate.alpha(0.3)
    Block0.setPosition(-7.5,1.1,-3.7)
    Block0.setEuler(90,0,0)
    Block0.setScale(.3,.3,.3)
    bs=vizproximity.addBoundingBoxSensor(Block0)
    manager_b.addSensor(bs)
    b.append(Block0)
    #Block0.collideBox()
    Block0.disable(viz.DYNAMICS)
    #   global link 
    #   ss=viz.link(crate,Block0)
    #   ss.preTrans( [-0.17,-0.1,-.1 ])


    #   Block0.enable(viz.RENDERING)

/方框2----------表1

    global Block1
    Block1=viz.addChild('b7.osgb')

    #crate = viz.addChild('crate.osgb',pos=[-7.38,1.2,-3]) 
    #crate.visible(viz.OFF)
    #crate.collideBox(density=50000000000)
    #crate.alpha(0.3)

    Block1.setPosition(-7.5,1.1,-2.9)
    Block1.setEuler(90,0,0)
    Block1.setScale(.3,.3,.3)
    bs=vizproximity.addBoundingBoxSensor(Block1)
    manager_b.addSensor(bs)
    b.append(Block1)
    #Block1.collideBox()
    Block1.disable(viz.DYNAMICS)
    #Block1.enable(viz.RENDERING)

/方框3---------表格

    global Block2
    Block2=viz.addChild('b9.osgb')

    #crate = viz.addChild('crate.osgb',pos=[-7.38,1.2,-2.1])                  
    #crate.visible(viz.OFF)
    #crate.collideBox(density=50000000000)
    #crate.alpha(0.3)
    Block2.setPosition(-7.5,1.1,-1.9)
    Block2.setEuler(90,0,0)
    Block2.setScale(.3,.3,.3)
    bs=vizproximity.addBoundingBoxSensor(Block2)
    manager_b.addSensor(bs)
    b.append(Block2)
    Block2.collideBox()
    #Block2.density=0.0000001

    Block2.disable(viz.DYNAMICS)
    #Block2.enable(viz.RENDERING)

/区块1---------表2

    global Block00
    Block00=viz.addChild('b2.osgb')
    Block00.setPosition(-7.5,1.15,4)
    Block00.setEuler(90,0,0)
    Block00.setScale(.3,.01,.3)    #.025,.0004,.02,
    b2.append(Block00)

/方框2---------表2 全球区块11
区块11=即addChild('b7.osgb') 块11.设置位置(-7.5,1.15,5) 块11.setEuler(90,0,0) 块11。设置刻度(.3,.01,.3) b2.追加(块11)

/方框3----------表3
全球区块22 区块22=即addChild('b9.osgb') 块22.设置位置(-7.5,1.1,6) 块22.setEuler(90,0,0) 块22。设置刻度(.3,.01,.3) b2.追加(块22) #在

    #viz.phys.setGravity(0,-9) #Sets the Y plane gravity to -2


    put_balloons(manager_b,b,b_y,b2)

Tags: linkabsglobalb2handaddchildcrateviz