python - 我的一个对象没有像我所有其他对象一样旋转
问题描述
所以对于一个学校项目,我需要建造一个可以发射炮弹的坦克。我有一个物体(圆柱体)位于佳能的顶端(使其看起来像佳能的内部)。该物体也是我射击炮弹的起点。我的很多对象名称可能都是法语,对此感到抱歉。
这是有问题的对象:
interieurcanon=cylinder(radius=1.5,pos=(63.1,23.5,0),axis=(1,0,0),color=(0,0,0))
我所有的旋转运动都很好,除非我尝试在另一个轴上降低或提升我的佳能然后 x。从那时起,它看起来很像这样
这是海拔的代码:
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
解决方案
推荐阅读
- tensorflow - 当我们在tensorflow服务配置文件中添加模型并重新加载配置文件时,如何将model_version_policy添加到“all”
- c# - 转到xamarin中的页面页面时如何在最后触发方法?
- reactjs - 将获取的数据传递给反应组件
- html - 如何制作破碎/波浪状的网格
- python - 无法判断列表元素的简单交换有什么问题
- c# - httprequest 未发送到有效的服务器
- php - 如何在 laravel 中将两个变量放入刀片视图中
- regex - 我可以在 HTACCESS 中使用 IF 语句,以便我可以 301 仅重定向特定域(对于单个 docroot 上的多域)
- python - 如何在 django rest 框架中仅使用特定变体对象将项目添加到愿望清单?
- lvm - 如何计算所有精简卷大小的总和?