0

我使用了放置在有两张桌子的环境中的盒子的碰撞。我用鼠标光标抓住对象并放在另一张桌子上。但是在对象之间进行碰撞检测的情况下,我面临一个问题。当对象和鼠标相互碰撞(最小距离)时,我对对象和鼠标使用了接近传感器,然后鼠标拾取/链接该对象。我也在使用相同的传感器进行碰撞,vizard bt 盒子文档中给出的一些物理概念相互碰撞,但由于它们飞行的重力。我把密度放在文档中给出的 bt i 不起作用。然后决定从这个逻辑中转移并尝试其他方法,我尝试形成两个邻近区域,一个用于 boxex 碰撞,一个位于盒子和鼠标之间,但盒子正在飞行。我对由 vizard 定义的板条箱使用了类似的概念,它在那里工作而不是在块中。请给出一些想法来解决这个问题。在这里,我附加了三个功能 - 一个用于手,另一个用于链接鼠标和块以及最后放置块。在环境中,我也已经使用了碰撞面板和碰撞表。因此,对于碰撞,我应该采用什么方法,因为当我使用相同的接近传感器时,它不会起作用。所有对象都放置在 vizard 的原点,然后手动设置放置在桌子上的位置。在环境中,我也已经使用了碰撞面板和碰撞表。因此,对于碰撞,我应该采用什么方法,因为当我使用相同的接近传感器时,它不会起作用。所有对象都放置在 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() ####### 接近位置 1 打印 xb11,yb11,zb11

        xb1= (abs(xb11))
        zb1= (abs(zb11))
        print xb1,zb1   


        xb22,yb22,zb22=b[1].getPosition()                            `        `           #######   proximity POSITION   2
        print xb22,yb22,zb22    

        xb2= (abs(xb22))
        zb2= (abs(zb22))
        print xb2,zb2

        xb33,yb33,zb33=b[2].getPosition()                            `              `           #######   proximity POSITION   3
        print xb33,yb33,zb33        

        xb3= (abs(xb33))
        zb3= (abs(zb33))
        print xb3,zb3   

    #       
    #   if ((zb1-zb2)<1.5 or (zb1-zb3)<1.5  or (xb1-xb2)<1.5
        or (xb1-xb3)<1.5):
    #           
    #       print 'Ashish'
    #       global tbox22
    #       tbox22=viz.addTextbox()
    #       tbox22.setPosition(0.11,0.1,0.1)
    #       global touch11
    #       touch11='OBSTACLE-ERROR'
    #       tbox22.message(str(touch11))  
    #           
    #       Block1.setPosition([-7.5,1.1,-2.9])                            `       #######   POSITION OF THE BALLOON`
    #       Block2.setPosition([-7.5,1.1,-1.9])                            `       #######   POSITION OF THE BALLOON`           
    #           
    #           #Block0.setPosition(xb11-1,yb11,zb11-1)                            `        #######   POSITION OF THE BALLOON`
    #           
    #           
    #   elif ((zb2-zb1)<.5 or (zb2-zb3)<.5  or (xb2-xb1)<.5
   or (xb2-xb3)<.5):
    #           
    #       print 'Ashish'
    #       global tbox22           
    #       tbox22=viz.addTextbox()
    #
    #       tbox22.setPosition(0.11,0.1,0.1)
    #       global touch11
    #       touch11='OBSTACLE-ERROR'
    #       tbox22.message(str(touch11))  
    #           
    #       Block0.setPosition([-7.5,1.11,-3.7])                            `       #######   POSITION OF THE BALLOON`
    #       Block2.setPosition([-7.5,1.1,-1.9])                            `       #######   POSITION OF THE BALLOON`                   
    #           
    #           #Block1.setPosition(xb22-1,yb22,zb22-1)                               `       #######   POSITION OF THE BALLOON`            
    #           
    #       
    #   elif ((zb3-zb1)<.5 or (zb3-zb2)<.5  or (xb3-xb1)<.5
        or (xb3-xb2)<.5):`
    #           
    #       print 'Ashish'
    #       global tbox22           
    #       tbox22=viz.addTextbox()
    #
    #       tbox22.setPosition(0.11,0.03,0.1)
    #       global touch11
    #       touch11='OBSTACLE-ERROR'
    #       tbox22.message(str(touch11))  
    #


`#      Block0.setPosition([-7.5,1.11,-3.7])`                                `  
    `#      Block1.setPosition([-7.5,1.1,-2.9])`                                          `     

     #          #Block2.setPosition(xb33-1,yb33,zb33-1)                                         

    #abc()  
    fb()

块的/代码我将与块的碰撞与我与平面/和桌子放置的相同,而与地平面然后重力将物体/向下拉,所以我与桌子发生碰撞以将块放在/桌子上

   def put_balloons(manager_b,b,b_y,b2):
   #    import vizshape
   #    aa=vizshape.addCube()
   #    aa.setPosition(-7.5,1.1,2.4)
   #    kk=aa.collideBox()
   #    kk.density=100000

/BLOCK 1--------- 表 1 全局 Block0

    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---------TABLE2

    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)

/BLOCK 2---------TABLE2 全局 Block11
Block11=viz.addChild('b7.osgb') Block11.setPosition(-7.5,1.15,5) Block11.setEuler(90,0,0) Block11 .setScale(.3,.01,.3) b2.append(Block11)

/BLOCK 3---------
TABLE3 全局 Block22 Block22=viz.addChild('b9.osgb') Block22.setPosition(-7.5,1.1,6) Block22.setEuler(90,0,0) Block22 .setScale(.3,.01,.3) b2.append(Block22) #

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


    put_balloons(manager_b,b,b_y,b2)
4

0 回答 0