这是第一篇关于Panda3D的学习笔记,不求能给大家以帮助,只希望记录下自己学习的过程。

今天学习的是panda3D自带的第一个示例程序,小行星。相比起完整的把所有语法看一遍,我更喜欢从实践中学习。

“本示例程序显示如何使用任务。任务是在程序的每一帧期间运行的函数。Panda3D在任何程序中运行一些任务,但可能会添加其他任务。对于本教程,除了检查碰撞之外,还将使用任务来更新船舶,小行星和子弹的位置。要做到这一点,您需要知道的所有数据是已经过了多少时间以及每个对象的速度” 这是官方文档的说法。

1. dt = globalClock.getDt()

用于记录上一帧结束至今所经历的时间

2. 任务

这是示例程序的核心内容,也是我今天学习的重点,对照https://www.panda3d.org/manual/index.php/Tasks进行学习。

任务是在应用程序执行时每帧调用一次的特殊功能。

任务是用函数或类方法定义的; 此功能是该任务的主要入口点,在任务运行时将在每帧中调用一次。默认情况下,该函数接收一个参数,它是任务对象; 任务对象携带有关任务本身的信息,例如任务已运行的时间量。

from direct.task import Task  导入Task类

返回值:

task的一些相关属性

tskMgr 任务管理器

添加任务及延时任务

taskMgr.add(exampleTask, 'MyTaskName')
taskMgr.doMethodLater(delayTime, myFunction, 'Task Name')

例程实例:

taskMgr.add(self.gameLoop, "gameLoop")
def gameLoop(self, task):
return Task.cont

必须感叹一下panda3d的例程的注释还是非常充分的,可惜网上的相关资料确实太少,而且英文的学习效率也不如中文

3. 模型图片加载

这部分里的model的egg文件还不是太懂,希望以后能弄明白

def loadObject(tex=None, pos=LPoint3(0, 0), depth=SPRITE_POS, scale=1,transparency=True):# Every object uses the plane model and is parented to the camera
    # so that it faces the screen.
    obj = loader.loadModel("models/plane")obj.reparentTo(camera)# Set the initial position and scale.
    obj.setPos(pos.getX(), depth, pos.getY())obj.setScale(scale)# This tells Panda not to worry about the order that things are drawn in
    # (ie. disable Z-testing).  This prevents an effect known as Z-fighting.
    obj.setBin("unsorted", 0)obj.setDepthTest(False)if transparency:# Enable transparency blending.
        obj.setTransparency(TransparencyAttrib.MAlpha)if tex:# Load and set the requested texture.
        tex = loader.loadTexture("textures/" + tex)obj.setTexture(tex, 1)return obj

通过这个函数,可以load图片。

写到这里突然想到,这个LPoint3和LVector3可能分别是三维数组类(三维向量数组类),并拥有getX,getY等方法。

4. OnscreenText的使用

一个用来快速删改界面文字的函数的类

from direct.gui.OnscreenText import OnscreenText
textObject = OnscreenText(text = 'my text string', pos = (-0.5, 0.02), scale = 0.07)

5.  setPythonTag

Also, by using the functions setTag() and getTag() you can store your own information in key value pairs. For example:

myNodePath.setTag("Key", "value")

You can also store Python objects as tags by using the setPythonTag function with the same arguments.

例程中的使用:

def setVelocity(self, obj, val):obj.setPythonTag("velocity", val)

和getPythonTag配合使用,记录数据

6. 事件处理程序

vents occur either when the user does something (such as clicking a mouse or pressing a key) or when sent by the script using messenger.send(). When an event occurs, Panda's "messenger" will check to see if you have written an "event handler" routine. If so, your event handler will be called. The messenger system is object-oriented, to create an event handler, you have to first create a class that inherits from DirectObject. Your event handler will be a method of your class.

myDirectObject.accept('Event Name',myDirectObjectMethod)
myDirectObject.acceptOnce('Event Name',myDirectObjectMethod)

例程中的

self.accept("escape", sys.exit)  # Escape quits
# Other keys events set the appropriate value in our key dictionary
self.accept("arrow_left",     self.setKey, ["turnLeft", 1])
self.ac cept("arrow_left-up",  self.setKey, ["turnLeft", 0])
self.accept("arrow_right",    self.setKey, ["turnRight", 1])
self.accept("arrow_right-up", self.setKey, ["turnRight", 0])
self.accept("arrow_up",       self.setKey, ["accel", 1])
self.accept("arrow_up-up",    self.setKey, ["accel", 0])
self.accept("space",          self.setKey, ["fire", 1])

Panda3D学习 (1):小行星示例程序相关推荐

  1. Windows 8 Directx 开发学习笔记(四)示例程序小结

    VS2012的示例程序包括了最基本的DirectX流程,涉及许多知识,所以看完代码之后还是感觉没有头绪,打算对整个过程再整理一下,方便进一步的学习. 正方体在空间中可以用它的8个顶点定义,而每个顶点可 ...

  2. 【FastDDS学习笔记】HelloWorld示例程序编译和运行

    目录 第一章:[FastDDS学习笔记]Ubuntu22上安装fastDDS环境 第二章:[FastDDS学习笔记]HelloWorld示例程序编译和运行 第三章:[FastDDS学习笔记]Fast- ...

  3. python学习-图片处理小程序(PIL的安装、PIL.Image的使用、 示例程序(图片灰度值修改))

    文章目录 PIL的安装 示例程序 PIL的安装 首先,win + R,打开命令运行窗口,然后输入cmd命令. 然后在命令行中,切换到python的安装目录下: 然后输入pip,在python3中pip ...

  4. 如何编译ReactNative示例程序Examples

    通过示例程序可以看到一些基本组件的使用,对于学习ReactNative是很有帮助的. 编译示例程序需要将整个项目导入到androidStudio中,androidStudio导入项目时选择react- ...

  5. 单片机 10种软件滤波方法的示例程序

    单片机学习笔记_10种软件滤波方法的示例程序 假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad(); 1.限副滤波 /*  A值可根据实际情况调整     v ...

  6. Dart Hello World 示例程序【Dart专题1】

    大家好,我是坚果,公众号"坚果前端",关注我公众号,获取更多细节 Dart Hello World 示例程序 Dart-你好世界 在本教程中,我们将编写一个非常基本的 Dart 程 ...

  7. 53.垃圾回收算法的实现原理、启动Java垃圾回收、Java垃圾回收过程、垃圾回收中实例的终结、对象什么时候符合垃圾回收的条件、GC Scope 示例程序、GC OutOfMemoryError的示例

    53.垃圾回收算法的实现原理 53.1.目录 53.2.启动Java垃圾回收 53.3.Java垃圾回收过程 53.4.垃圾回收中实例的终结 53.5.对象什么时候符合垃圾回收的条件? 53.5.1. ...

  8. 在ASP.NET AJAX中使用应用程序服务和本地化(4):示例程序:读取、修改并保存用户个性化信息...

    本文来自<ASP.NET AJAX程序设计 第II卷:客户端Microsoft AJAX Library相关>的第五章<应用程序服务和本地化>. 让我们通过编写一个完整的示例程 ...

  9. HALCON示例程序train_characters_ocr.hdev使用SVM分类器训练字体

    HALCON示例程序train_characters_ocr.hdev使用SVM分类器训练字体 小哥哥小姐姐觉得有用点个赞呗! 示例程序源码(加注释) 蓝色字体均为算子解释链接,可以前往查看解答 关于 ...

最新文章

  1. linux查看流量开源,Linux流量监控工具 - iftop
  2. Silverlight实例教程 - Out of Browser在线更新和Silent安装
  3. python paramiko模块 远程上传目录文件
  4. Vue——Windows 10下Vue项目启动步骤[vue-cli-service启动版本]
  5. React Native应用如何想访问HTTP资源应该怎么办
  6. shell脚本自动备份MySQL数据库
  7. Linux—编写shell脚本操作数据库执行sql
  8. 华为手机harmonyos系统,华为王成录:手机销量仍在增长 未来会是HarmonyOS系统的中心...
  9. pulseaudio之pacmd命令
  10. Java定时任务调度框架
  11. 球面坐标系与三角函数 Spherical Coordinates and Trigonometric Functions
  12. 2017/7/11 新开博客
  13. Android Studio 插件整理
  14. jmeter性能测试--对MQTT服务做压力测试
  15. Win10下kafka简单安装及使用
  16. Linux基础 第三节 第三课
  17. 蓝魔平板i9s刷机Android,蓝魔i9s 乐蛙ROM刷机教程
  18. 【WPS绘图】用PPT画立方八面体单晶
  19. 安装homeassistant+python3.6
  20. Java 的免费之处和收费之处

热门文章

  1. 什么是https?https为什么安全?
  2. idea各种中文乱码问题
  3. Shiro系统权限管理、及原理剖析
  4. 50+ Best Unity Assets: Shader, Editor Extensions, Level Editors, Models, Terrain
  5. C# Revit二次开发基础/核心编程---建筑建模-标高和轴网
  6. 人工智能是引领未来的战略性技术 推动人工智能多学科交叉融合
  7. L1正则化与L2正则化详解
  8. 基于语音控制的智能家居实现
  9. setsockopt 设置socket
  10. GBase8s数据库GRANT 语句