因此,对于一个学校项目,我需要建造一个可以发射炮弹的坦克。我在佳能的顶端有一个物体(圆柱体)(使其看起来像佳能的内部)。该对象也是我拍摄外壳的起点。我的许多对象名称可能都是法语的,为此感到抱歉。
这是有问题的物体
interieurcanon=cylinder(radius=1.5,pos=(63.1,23.5,0),axis=(1,0,0),color=(0,0,0))
我所有的旋转运动都很好,除非当我尝试在另一轴然后x上降低或升高我的佳能时。从这一点来看,它看起来很像nothing out of ordinary
这是海拔的代码:
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