Один из моих объектов не вращается, как все мои другие объекты - PullRequest
0 голосов
/ 16 декабря 2018

Так что для школьного проекта мне нужно построить танк, который может стрелять снарядами.У меня есть объект (цилиндр), который находится на кончике канона (чтобы он выглядел как внутренняя часть канона).Этот объект также является моей стартовой точкой, с которой производится выстрел.Многие из моих имен объектов могут быть на французском языке, так что извините за это.

Вот объект, о котором идет речь:

interieurcanon=cylinder(radius=1.5,pos=(63.1,23.5,0),axis=(1,0,0),color=(0,0,0))

Все мое вращательное движение в порядке, за исключением случаев, когда я пытаюсь опустить или поднять мой канон по другой оси, затем x.С этого момента это выглядит очень похоже на this

Вот код для возвышения:

if clavier == "up": #and interieurcanon.pos.y <= 54 and tir == 0: #elevation canon haut
        canon.rotate(angle=pi/64,axis=(0,0,abs(bcanon.axis.x)),origin=pivot.pos)
        pivot.rotate(angle=pi/64,axis=(0,0,abs(bcanon.axis.x)),origin=pivot.pos)
        fboulet.rotate(angle=pi/64,axis=(0,0,abs(bcanon.axis.x)),origin=pivot.pos)
        interieurcanon.rotate(angle=pi/64,axis=(0,0,abs(bcanon.axis.x)),origin=pivot.pos)
if clavier == "down": #and interieurcanon.pos.y >= 23.5 and tir == 0: #elevation canon bas
        canon.rotate(angle=-pi/64,axis=(0,0,abs(bcanon.axis.x)),origin=pivot.pos)
        pivot.rotate(angle=-pi/64,axis=(0,0,abs(bcanon.axis.x)),origin=pivot.pos)
        fboulet.rotate(angle=-pi/64,axis=(0,0,abs(bcanon.axis.x)),origin=pivot.pos)
        interieurcanon.rotate(angle=-pi/64,axis=(0,0,abs(bcanon.axis.x)),origin=pivot.pos)

По какой-то причине interieurcanon является единственным объектом, который не будет следоватьостальная часть объекта в этих двух if.

Вот ссылка на весь мой код: (эта первая часть - танк, о котором идет речь)

from visual import *  # pour importer une image de la librairie visuelle

scene.background=(0,0,0) # couleur = (R,G,B) - pour red, green, blue
scene.height=1000
scene.width=1000
terrain=box(size=(1000,0,1000),color=(0,1,0),pos=(0,0,0),material=materials.rough)

#frame du tank
tank=frame()

# Serie de roues cote conducteur (1-6)
roue0=ring(frame=tank,thickness=0.9,radius=2,color=(0.5,0.5,0.5),pos=(33,8.7,17),axis=(0,0,1))
roue1=ring(frame=tank,thickness=1,radius=5,color=(0.5,0.5,0.5),pos=(25,6,17),axis=(0,0,1))
roue2=ring(frame=tank,thickness=1,radius=5,color=(0.5,0.5,0.5),pos=(15,6,17),axis=(0,0,1))
roue3=ring(frame=tank,thickness=1,radius=5,color=(0.5,0.5,0.5),pos=(5,6,17),axis=(0,0,1))
roue4=ring(frame=tank,thickness=1,radius=5,color=(0.5,0.5,0.5),pos=(-5,6,17),axis=(0,0,1))
roue5=ring(frame=tank,thickness=1,radius=5,color=(0.5,0.5,0.5),pos=(-15,6,17),axis=(0,0,1))
roue6=ring(frame=tank,thickness=1,radius=5,color=(0.5,0.5,0.5),pos=(-25,6,17),axis=(0,0,1))
roue7=ring(frame=tank,thickness=0.9,radius=2,color=(0.5,0.5,0.5),pos=(-33,8.7,17),axis=(0,0,1))

#rim de roues cote conducteur
rim0=cylinder(frame=tank,thickness=0.9,radius=1.5,color=(0.5,0.5,01),pos=(33,8.7,17),axis=(0,0,1))
rim1=cylinder(frame=tank,radius=4, thickness=1,color=(0.5,0.5,1),pos=(25,6,16.5),axis=(0,0,1))
rim2=cylinder(frame=tank,radius=4, thickness=1,color=(0.5,0.5,1),pos=(15,6,16.5),axis=(0,0,1))
rim3=cylinder(frame=tank,radius=4, thickness=1,color=(0.5,0.5,1),pos=(5,6,16.5),axis=(0,0,1))
rim4=cylinder(frame=tank,radius=4, thickness=1,color=(0.5,0.5,1),pos=(-5,6,16.5),axis=(0,0,1))
rim5=cylinder(frame=tank,radius=4, thickness=1,color=(0.5,0.5,1),pos=(-15,6,16.5),axis=(0,0,1))
rim6=cylinder(frame=tank,radius=4, thickness=1,color=(0.5,0.5,1),pos=(-25,6,16.5),axis=(0,0,1))
rim7=cylinder(frame=tank,thickness=0.9,radius=1.5,color=(0.5,0.5,1),pos=(-33,8.7,17),axis=(0,0,1))

# Serie de roues cote passager (a-f)
roueaa=ring(frame=tank,thickness=0.9,radius=2,color=(0.5,0.5,0.5),pos=(33,8.7,-17),axis=(0,0,1))
rouea=ring(frame=tank,thickness=1,radius=5,color=(0.5,0.5,0.5),pos=(25,6,-17),axis=(0,0,1))
roueb=ring(frame=tank,thickness=1,radius=5,color=(0.5,0.5,0.5),pos=(15,6,-17),axis=(0,0,1))
rouec=ring(frame=tank,thickness=1,radius=5,color=(0.5,0.5,0.5),pos=(5,6,-17),axis=(0,0,1))
roued=ring(frame=tank,thickness=1,radius=5,color=(0.5,0.5,0.5),pos=(-5,6,-17),axis=(0,0,1))
rouee=ring(frame=tank,thickness=1,radius=5,color=(0.5,0.5,0.5),pos=(-15,6,-17),axis=(0,0,1))
rouef=ring(frame=tank,thickness=1,radius=5,color=(0.5,0.5,0.5),pos=(-25,6,-17),axis=(0,0,1))
roueff=ring(frame=tank,thickness=0.9,radius=2,color=(0.5,0.5,0.5),pos=(-33,8.7,-17),axis=(0,0,1))

#rim de roues cote passager
rimaa=cylinder(frame=tank,thickness=0.9,radius=1.5,color=(0.5,0.5,1),pos=(33,8.7,-17),axis=(0,0,1))
rima=cylinder(frame=tank,radius=4, thickness=1,color=(0.5,0.5,1),pos=(25,6,-17.5),axis=(0,0,1))
rimb=cylinder(frame=tank,radius=4, thickness=1,color=(0.5,0.5,1),pos=(15,6,-17.5),axis=(0,0,1))
rimc=cylinder(frame=tank,radius=4, thickness=1,color=(0.5,0.5,1),pos=(5,6,-17.5),axis=(0,0,1))
rimd=cylinder(frame=tank,radius=4, thickness=1,color=(0.5,0.5,1),pos=(-5,6,-17.5),axis=(0,0,1))
rime=cylinder(frame=tank,radius=4, thickness=1,color=(0.5,0.5,1),pos=(-15,6,-17.5),axis=(0,0,1))
rimf=cylinder(frame=tank,radius=4, thickness=1,color=(0.5,0.5,1),pos=(-25,6,-17.5),axis=(0,0,1))
rimff=cylinder(frame=tank,thickness=0.9,radius=1.5,color=(0.5,0.5,1),pos=(-33,8.7,-17),axis=(0,0,1))

#chenille du tank
chenille1=shapes.trapezoid(width=60,height=12,top=80,pos=(0,6,0),thickness=0.05,roundness=0.1)
extrusion(pos=[(0,0,-17),(0,0,-21)],shape=chenille1,color=(1,1,0),frame=tank)
chenille2=shapes.trapezoid(width=60,height=12,top=80,pos=(0,6,0),thickness=0.05,roundness=0.1)
extrusion(pos=[(0,0,17),(0,0,21)],shape=chenille2,color=(1,1,0),frame=tank)

#base du tank
base1=box(frame=tank,size=(32,12,65),pos=(0,9,0),color=(1,1,1),axis=(0,0,1))
base2=shapes.trapezoid(width=65,height=5,top=50,pos=(0,18,0))
extrusion(pos=[(0,0,-16),(0,0,16)],shape=base2,color=(0.2,0.2,0.2),frame=tank)


#base du canon
bcanon=frame()
basecanon=shapes.trapezoid(width=30,height=6,top=20,pos=(0,23.5,0),roundness=0.1)
extrusion(pos=[(0,0,-16),(0,0,16)],shape=basecanon,color=(0.3,0.2,0.6),frame=bcanon)

#canon
fcanon=frame()
canon=cylinder(radius=2,pos=(14,23.5,0),color=(1,1,1),axis=(50,0,0),thickness=0.1,frame=bcanon)
interieurcanon=cylinder(radius=1.5,pos=(63.1,23.5,0),axis=(1,0,0),color=(0,0,0))
pivot=box(frame=bcanon,size=(5,5,6),pos=(12,23.5,0),color=(1,1,0),axis=(50,0,0),roundess=0.1)

#boulet
#fboulet=frame()
fboulet=sphere(radius=1.5,color=(1,0,1),pos=canon.pos,make_trail=true)
fboulet.v=vector(0,0,0)
fboulet.visible=0

Этот последний фрагмент кода - вседвижение связано с танком

a=vector(0,-9.8,0)
t=0
rechargement = 0
tir=0
dt=0.1
#Mouvement du tank
while 1:
    rate (100)
    tank.v=20*tank.axis
    bcanon.v=20*tank.axis
    fcanon.v=20*tank.axis
    interieurcanon.v=20*tank.axis
    if scene.kb.keys:
        clavier=scene.kb.getkey()
        if clavier == "y":
            controles.visible=0
            aide.visible=1
        if clavier == "t" and controles.visible==0:
            controles.visible=1
            aide.visible=0
        if clavier == "p":

            print pivot.axis
            print canon.axis
            print bcanon.axis
            print tank.axis
        if clavier == "w" and tir == 0: #tank avance
            tank.pos=tank.pos+tank.v*dt
            bcanon.pos=bcanon.pos+bcanon.v*dt
            fcanon.pos=fcanon.pos+fcanon.v*dt
            fboulet.pos=fboulet.pos+tank.v*dt
            interieurcanon.pos=interieurcanon.pos+interieurcanon.v*dt
        if clavier == "s" and tir == 0: #tank recule
            tank.pos=tank.pos-tank.v*dt
            bcanon.pos=bcanon.pos-bcanon.v*dt
            fcanon.pos=fcanon.pos-fcanon.v*dt
            fboulet.pos=fboulet.pos-tank.v*dt
            interieurcanon.pos=interieurcanon.pos-interieurcanon.v*dt
        if clavier == "a" and tir == 0: #tank tourne a gauche
            tank.rotate(angle=pi/64,axis=(0,1,0),origin=tank.pos)
            bcanon.rotate(angle=pi/64,axis=(0,1,0),origin=bcanon.pos)
            fcanon.rotate(angle=pi/64,axis=(0,1,0),origin=fcanon.pos)
            fboulet.rotate(angle=pi/64,axis=(0,1,0),origin=bcanon.pos)
            interieurcanon.rotate(angle=pi/64,axis=(0,1,0),origin=bcanon.pos)
        if clavier == "d" and tir == 0: #tank tourne a droite
            tank.rotate(angle=-pi/64,axis=(0,1,0),origin=tank.pos)
            bcanon.rotate(angle=-pi/64,axis=(0,1,0),origin=bcanon.pos)
            fcanon.rotate(angle=-pi/64,axis=(0,1,0),origin=fcanon.pos)
            fboulet.rotate(angle=-pi/64,axis=(0,1,0),origin=bcanon.pos)
            interieurcanon.rotate(angle=-pi/64,axis=(0,1,0),origin=bcanon.pos)
        if clavier == "left" and tir == 0: #rotation base canon gauche
            bcanon.rotate(angle=pi/64,axis=(0,1,0),origin=bcanon.pos)
            fcanon.rotate(angle=pi/64,axis=(0,1,0),origin=fcanon.pos)
            fboulet.rotate(angle=pi/64,axis=(0,1,0),origin=bcanon.pos)
            interieurcanon.rotate(angle=pi/64,axis=(0,1,0),origin=bcanon.pos)
        if clavier == "right" and tir == 0: #rotation base canon droite
            bcanon.rotate(angle=-pi/64,axis=(0,1,0),origin=bcanon.pos)
            fcanon.rotate(angle=-pi/64,axis=(0,1,0),origin=fcanon.pos)
            fboulet.rotate(angle=-pi/64,axis=(0,1,0),origin=bcanon.pos)
            interieurcanon.rotate(angle=-pi/64,axis=(0,1,0),origin=bcanon.pos)
        if clavier == "up": #and interieurcanon.pos.y <= 54 and tir == 0: #elevation canon haut
            canon.rotate(angle=pi/64,axis=(0,0,abs(bcanon.axis.x)),origin=pivot.pos)
            pivot.rotate(angle=pi/64,axis=(0,0,abs(bcanon.axis.x)),origin=pivot.pos)
            fboulet.rotate(angle=pi/64,axis=(0,0,abs(bcanon.axis.x)),origin=pivot.pos)
            interieurcanon.rotate(angle=pi/64,axis=(0,0,abs(bcanon.axis.x)),origin=pivot.pos)
        if clavier == "down": #and interieurcanon.pos.y >= 23.5 and tir == 0: #elevation canon bas
            canon.rotate(angle=-pi/64,axis=(0,0,abs(bcanon.axis.x)),origin=pivot.pos)
            pivot.rotate(angle=-pi/64,axis=(0,0,abs(bcanon.axis.x)),origin=pivot.pos)
            fboulet.rotate(angle=-pi/64,axis=(0,0,abs(bcanon.axis.x)),origin=pivot.pos)
            interieurcanon.rotate(angle=-pi/64,axis=(0,0,abs(bcanon.axis.x)),origin=pivot.pos)
        if clavier == " " and tir==0: #tir du canon
            fboulet=sphere(radius=1.5,color=(1,0,1),pos=interieurcanon.pos,make_trail=true)
            fboulet.v=1*vector(canon.axis.x*tank.axis.x*abs(bcanon.axis.x),canon.axis.y,canon.axis.x*tank.axis.z*abs(bcanon.axis.z))
            tir=1
    if tir == 1:
        print fboulet.v
        fboulet.v=fboulet.v+a*dt
        fboulet.pos=fboulet.pos+fboulet.v*dt+0.5*a*dt**2
        print fboulet.pos
        if fboulet.pos.y < 0:
            fboulet.pos=canon.pos
            tir=0
            fboulet.visible=0



#position avec click souris (laisser a la fin)
    if scene.mouse.clicked:
        souris=scene.mouse.getclick()
        scene.center=souris.pos
        print souris.pos
...