1.下載panda3d等等
panda3d是python的一个第三方库,在Windows的cmd下输入即可下載:
pip install panda3d
另外还用了 PIL,Pmw,ttkbootstrap這些第三方库,下載方式同上。。。
2.方块模型
对于建模小白来说,blender有亿点难!!
(资源放文章结尾了!)
3.代码编写
可读性极差,后面注释懒得写了。。。
main.py
from direct.showbase.ShowBase import ShowBase
from pandac.PandaModules import WindowProperties
from direct.task import Task
from direct.actor.Actor import Actor
from direct.interval.IntervalGlobal import Sequence
from panda3d.core import *
from panda3d.core import loadPrcFileData
from direct.showbase import DirectObject
from direct.gui.OnscreenText import OnscreenText
from direct.gui.DirectGui import *
from direct.particles.ParticleEffect import ParticleEffect
import random
from Mode_FUNCTION import *
from tkinter import *
from panda3d.core import WindowProperties
from PIL import Image,ImageTk
import math
from panda3d.core import CollisionHandlerPusher
from panda3d.core import CollisionSphere, CollisionNode
from direct.gui.OnscreenImage import OnscreenImage
import ttkbootstrap as ttk
from ttkbootstrap import Style
from ttkbootstrap.constants import *
from panda3d.core import Material
import sys
WORD = open('MAINWORD.txt','r',encoding = 'UTF-8')
MODE = open('WORDMODE.txt','r',encoding = 'UTF-8')
#imageObject = OnscreenImage(image='myImage.jpg', pos=(-0.5, 0, 0.02))
Scale = 18
loadMode_all_list = ["mode//land_gree.egg","mode//glass.egg",\
"mode//salt.egg","mode//land.egg",\
'mode//oxeye_daisy.egg','mode//Tree_wood.egg',\
'mode//snow_lend.egg',"mode//grass_Guo.egg",'mode//bedrock.egg'\
,'mode//magma.egg' ,'mode//torch.egg','mode//ice.egg'\
,'mode//water.egg','mode//snow.egg'\
,'mode//Tree_leaves.egg','mode//music.egg']
Mode_all_function = [land_gree,glass,\
False,False,grass,\
False,False,grass,False\
,magma,torch,False,water,False,False
,music]
MAP_dict = {"mode//land_gree.egg":land_gree,"mode//glass.egg":glass,\
"mode//salt.egg":False,"mode//land.egg":False,\
'mode//oxeye_daisy.egg':grass,'mode//Tree_wood.egg':False,\
'mode//snow_lend.egg':False,"mode//grass_Guo.egg":grass,'mode//bedrock.egg':False\
,'mode//magma.egg':magma ,'mode//torch.egg':torch,'mode//ice.egg':False\
,'mode//water.egg':water,'mode//snow.egg':False\
,'mode//Tree_leaves.egg':False,'mode//music.egg':music}
loadMode_list = []
list_function = []
ima=[]
for i in range(10):
loadMode_list.append(loadMode_all_list[i])
list_function.append(Mode_all_function[i])
#print(loadMode_list)
# 重力加速度
GV = 50
image = []
def add_image(la,image_):
global image
image_ = Image.open(image_)
image_ = image_.resize((30, 30),Image.ANTIALIAS)
image.append(ImageTk.PhotoImage(image_))
la.config(image = image[len(image)-1])
def addInstructions2(pos, msg):
return OnscreenText(text=msg, style=1, fg=(1, 1, 1, 1), scale=.05,
shadow=(0, 0, 0, 1), parent=base.a2dTopLeft,
pos=(1.2, -pos - 0.04), align=TextNode.ALeft
)
def addInstructions(cmr12,pos, msg):
if cmr12=='':
return OnscreenText(text=msg, style=1, fg=(1, 1, 1, 1), scale=.05,
shadow=(0, 0, 0, 1), parent=base.a2dTopLeft,
pos=(0.08, -pos - 0.04), align=TextNode.ALeft
)
else:
return OnscreenText(text=msg, style=1, fg=(1, 1, 1, 1), scale=.05,
shadow=(0, 0, 0, 1), parent=base.a2dTopLeft,
pos=(0.08, -pos - 0.04), align=TextNode.ALeft
,font = cmr12)
class MyApp(ShowBase):
def __init__(self):
ShowBase.__init__(self, windowType = 'none')
base.startTk()
style = Style(theme='newtheme')
self.frame = base.tkRoot
self.frame.geometry("800x600")
label = Label(self.frame,relief="flat")
label.place(relx=0.04, rely=0.05, anchor=CENTER,height = 40 ,width = 40)
#add_image(label ,'mode\\cool_back.jpg')
image_ = Image.open('mode\\cool_back.jpg')
image_ = image_.resize((30, 30),Image.ANTIALIAS)
label.config(image = ImageTk.PhotoImage(image_))
props = WindowProperties()
props.set_parent_window(self.frame.winfo_id())
props.set_origin(0, 0)
props.set_size(self.frame.winfo_width(), self.frame.winfo_height())
#base.enableParticles()
#self.p = ParticleEffect()
#self.p.loadConfig('particles\\fireish.ptf')
#p.start(parent = render, renderParent = render)
base.make_default_pipe()
base.open_default_window(props = props)
self.frame.bind("<Configure>", self.resize)
cmr12 = self.loader.loadFont('cmr12.egg')
self.title1 = addInstructions('',1.88,"New word")
self.title2 = addInstructions(cmr12,1.94,"Panda: my word_1.0")
myMaterial = Material()
myMaterial.setShininess(128.0) # Make this material shiny
myMaterial.setAmbient((0, 0, 1, 1))
myMaterial.setEmission((0,0,100,100))
#myMaterial.setSpecular((255,255,255,255))
self.key = 0
self.init_h = 3
self.Camerapos = [0.1,0.1,self.init_h]
self.Cameramode = True
self.rotate_speed = 30
self.up_speed = 380
self.run_speed = 0.3
self.rotate_y = 0
self.rotate_x = 0
self.dont_run = 0
self.light_rotate = 135
self.e_bag = False
self.esc = True
self.square_num = 0
self.fame_bu = Frame(self.frame,bg = '#D3D3D3')
self.fame_bu.place(relx=0.5, rely=0.96, anchor=CENTER,height = 42 ,width = 412)
self.la_list = []
for i in range(10):
self.la = Label(self.fame_bu,relief="flat")
self.la.place(x=i*41+1,y=1,height = 40 ,width = 40)
self.la_list.append(self.la)
e = 0
for i in loadMode_list:
add_image(self.la_list[e] ,i+'.png')
e += 1
self.la_list[self.square_num].config(relief="solid")
# 初速度
self.V = 0
self.win.setClearColor((0.2549, 0.41176, 0.88235, 0))
#ambientLight = AmbientLight("ambientLight")
# ambientLight.setColor((.3, .3, .3, 1))
# directionalLight = DirectionalLight("directionalLight")
# directionalLight.setDirection((-5, -5, -5))
# directionalLight.setColor((1, 1, 1, 1))
# directionalLight.setSpecularColor((1, 1, 1, 1))
# render.setLight(render.attachNewNode(ambientLight))
# render.setLight(render.attachNewNode(directionalLight))
#plight = PointLight('plight')
#plight.setColor((0.2, 0.2, 0.2, 2))
#plight.attenuation = (0, 0, 0.00001)
# plnp = render.attachNewNode(plight)
# plnp.setPos(0, 0, 100)
# render.setLight(plnp)
alight = AmbientLight('alight')
alight.setColor((0.1, 0.1, 0.1, 0.1))
alnp = render.attachNewNode(alight)
#render.setLight(alnp)
self.alight = render.attachNewNode(AmbientLight("Ambient"))
self.alight.node().setColor(LVector4(0.7, 0.7, 0.7, 0.4))
render.setLight(self.alight)
# Important! Enable the shader generator.
render.setShaderAuto()
#alight.setShadowCaster(True, 512, 512)
#plight.setShadowCaster(True, 512, 512)
#render.setShaderAuto()
# 显示碰撞物体
# 添加为活跃对象
self.camera.setPos(self.Camerapos[0] ,self.Camerapos[1] ,self.Camerapos[2])
#scene = loader.loadModel("mode//env.egg.pz")
#scene.reparentTo(render)
#scene.setScale(1000, 1000, 1000)
#scene.setPos(0, 0, -1.99)
#self.cleck = loader.loadModel("mode//ice.egg")
#self.cleck.reparentTo(render)
#self.cleck.setScale(1.01, 1.01, 1.01)
#self.cleck.setPos(0, 0, 6)
self.cleck = loader.loadModel("mode//cleck_cool.egg")
self.cleck.reparentTo(render)
self.cleck.setScale(0.51, 0.51, 0.51)
self.cleck.setPos(0, 0, -4)
z = -1
self.cTravTwo = CollisionTraverser()
self.cTravTwo.setRespectPrevTransform(True)
#self.me = loader.loadModel("mode//steve.egg")
#self.me.reparentTo(render)
#self.me.setScale(0.5,0.5, 0.5)
#self.me.setPos(0, 0, 0)
#s=1.3
self.camGroundRay = CollisionRay()
#self.camGroundRay.setRespectPrevTransform(True)
self.camGroundRay.setOrigin(0, 0, 9)
self.camGroundRay.setDirection(0, 0, -1)
# self.camGroundRay1 = CollisionRay()
# self.camGroundRay1.setOrigin(-s, s, 9)
# self.camGroundRay1.setDirection(0, 0, -1)
# self.camGroundRay2 = CollisionRay()
# self.camGroundRay2.setOrigin(s, -s, 9)
# self.camGroundRay2.setDirection(0, 0, -1)
# self.camGroundRay3 = CollisionRay()
# self.camGroundRay3.setOrigin(-s, -s, 9)
# self.camGroundRay3.setDirection(0, 0, -1)
# self.camGroundRay4 = CollisionRay()
# self.camGroundRay4.setOrigin(0, 0, 9)
# self.camGroundRay4.setDirection(0, 0, -1)
self.ralphGroundHandler_two = CollisionHandlerQueue()
self.camGroundCol = CollisionNode('camRay')
#Collision_listi = [[-0.9*s,0.8*s],[-0.7*s,0.8*s],[0.7*s,0.8*s],[0.9*s,0.8*s],[-0.9*s,-2.2*s],\
# [-0.6*s,-2.2*s],[0.6*s,-2.2*s],[0.9*s,-2.2*s],[0.6*s,0.6*s],\
# [-0.6*s,0.6*s],[0.6*s,-0.6*s],[-0.6*s,-0.6*s],[0,-0.6*s],[0,0.6*s]]
Collision_listii = []
Collision_listi = [[1.2,1.2],[1,-1.2],[-1.2,1.2],[-1.2,-1.2],\
[0,1.2],[1.2,0],[-1.2,0],[0,-1.2],[0,0],\
[1.2,0.6],[0.6,1,2],[1.2,-0.6],[0.6,-1.2],\
[-1.2,0.6],[-0.6,1,2],[-1.2,-0.6],[-0.6,-1.2]]
for i in Collision_listi:
self.camGroundRay = CollisionRay()
self.camGroundRay.setOrigin(i[0], i[1], 9)
self.camGroundRay.setDirection(0, 0, -1)
self.camGroundCol.addSolid(self.camGroundRay)
self.camGroundCol.addSolid(self.camGroundRay)
self.camGroundCol.setFromCollideMask(GeomNode.getDefaultCollideMask())
self.me = Actor("mode/steve.egg",
{"run": "models/steve_run.egg"})
#self.me = loader.loadModel("mode//steve.egg")
self.me.reparentTo(render)
self.me.setScale(0.4, 0.4, 0.4)
self.me.setPos(0, 0, 0)
self.me.setTwoSided(False)
self.me.hide()
self.me.setTag('myObjectTag','me')
self.scene1 = loader.loadModel("env.egg.pz")
self.scene1.reparentTo(render)
self.scene1.setTwoSided(True)
self.scene1.setShaderAuto()
self.scene1.setScale(600, 600, 600)
self.scene1.setPos(0, 0, -160.99)
#self.me.loop("
self.light = render.attachNewNode(Spotlight("Spot"))
#self.light.node().setScene(render)
self.light.node().setShadowCaster(True)
self.light.setPos(0,-30,1)
self.light.setHpr(0,self.light_rotate,0)
self.light.node().showFrustum()
self.light.node().getLens().setFov(40)
self.light.node().getLens().setNearFar(10, 100)
render.setLight(self.light)
#lens = PerspectiveLens()
#self.light.setLens(lens)
#self.slnp = render.attachNewNode(self.light)
#self.slnp.node().setShadowCaster(True)
#self.slnp.node().getLens().setFov(40)
#self.slnp.node().getLens().setNearFar(10, 100)
#self.slnp.setPos(10, 20, 0)
#slnp.lookAt(myObject)
self.camGroundColNp = self.me.attachNewNode(self.camGroundCol)
#self.camGroundHandler = CollisionRay()
self.cTravTwo.addCollider(self.camGroundColNp, self.ralphGroundHandler_two)
self.camGroundColNp.show()
#self.cTravTwo.showCollisions(render)
#self.plightw = Poi

最低0.47元/天 解锁文章
1676

被折叠的 条评论
为什么被折叠?



