`
isiqi
  • 浏览: 16124495 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

KongfuPandaGameEngine编写日记--2010年8月8日0点49分

阅读更多

刚刚才修改完我这个引擎,发现了很多的东西,还是学到了很多的东西,呵呵,本来觉得我写这个东西是在自己和自己说话,居然还有人会看看,还给我提出了一些看法,我觉得很高兴啊,网络就是好啊,这样才能进步啊,毕竟我不能和物理组那位老师相比,所以很希望得到大家的指导,在此很感谢 暗影吉他手

说说今天喃,发现还是做了不少的东西,改了一下,我那简陋得不能再简陋的寻路系统了,先贴下代码:

/// <summary>
/// 很简单的寻路系统,只是做直线的寻路,返回一步的方向和移动位置
/// </summary>
public class StraightLineSearchWay:SearchWayBase
{
public StraightLineSearchWay(){}

public static ModelStep SearchWay(Vector3 pickPos,
ModelControlBase modelControl)
{
Vector3 modelPos = modelControl.WorldPostion;
Vector3 modelForwardDirection = pickPos - modelPos;
Vector3 modelCurrentDirection = Vector3.Transform(
modelControl.modelOriginalDirection,
modelControl.ModelRotation);
//运用向量点积得到两个向量的夹角
float cos =
Vector3.Dot(modelCurrentDirection, modelForwardDirection) /
(modelForwardDirection.Length() * modelCurrentDirection.Length());
//上面计算了旋转的角度,然后要计算旋转的方向,是左边还是右边
//因为cos的函数值只能得到180的旋转,所以这很重要
//这里我用到的叉积
Vector3 dir =
Vector3.Cross(modelCurrentDirection,modelForwardDirection);
//方向在左边的话返回-1,方向在右边的话返回1(这个地方可能出错,我记不太清)
//这样就方便的了后面的四元数计算,因为发现用四元数旋转是逆时针旋转
float sign = (Vector3.Dot(
dir, new Vector3(0, 1, 0)) > 0 ? 1 : -1);
float angle=(float)System.Math.Acos(cos);

Quaternion rot=
Quaternion.CreateFromAxisAngle(new Vector3(0,1,0),
sign*angle);
//在测试的时候发现当cos约等于1的时候,acos的值总是非数字,使
//系统异常,所以,在这里加了这个判断
if (float.IsNaN(angle))
{
rot = Quaternion.Identity;
}
ModelStep step = new ModelStep();
step.NextStepPosition = modelControl.WorldPostion +
Vector3.Transform(modelControl.ForwardVector,
rot * modelControl.ModelRotation);
step.NextStepRotation = rot * modelControl.ModelRotation;

return step;
}

}

以上就是我做的一个简单的寻路,因为只是前期的测试,现在我也有点急于想看到其他类是否到达了预想的效果,所以才做这个东西

主要还是用到了叉积和点积这两个东西,即vector3.Cross和vector3.Dot

参考的网页请看:

向量积

http://zh.wikipedia.org/zh-cn/%E5%90%91%E9%87%8F%E7%A9%8D

数量积

http://zh.wikipedia.org/zh-cn/%E6%95%B0%E9%87%8F%E7%A7%AF

其中里面很重要的一张图就是:

像路面拾取这种代码就不想贴了,网上到处都是,射线的算法都一样,可能在算交点的时候会有所不同,毕竟地形的绘制方法很多

我重新给游戏换了一个摄像机,因为我发现我以前写那个摄像机的是像CS那种的,适用于射击类游戏,我今天又玩了一下诛仙2,发现它的摄像机的视角是不会随着人物旋转的,所以换了一个,同时,我也在这个摄像机里面加入了用鼠标右键和划滚进行调节摄像机视角旋转,摄像机于人物距离的功能,感觉好得多了,呵呵

但是这个摄像机类很是有所不足,因为在旋转视角和拉伸距离的时候,会发现如果拉伸或者旋转过度了,会造成很多不太雅观的现象,虽然看似很小的问题,但是,还是要解决的

具体的效果图:

还有一点点就是,那个白色的圈,呵呵,就是指示鼠标拾取的位置,然后这个地方我用的是一张图片,因为涉及到背景色透明化,然后在网上找了下,看到一些比较有效的,只要添加这几段代码就可以了:

device.RenderState.AlphaBlendEnable = true;
device.RenderState.SourceBlend = Blend.BothSourceAlpha;
device.RenderState.DestinationBlend = Blend.SourceAlpha;

还有一段可以是游戏全屏切换的函数

/// <summary>
/// 游戏屏幕全屏类,使游戏全屏切换
/// </summary>
public class ToggleFullScreen:UIAssistorBase
{
public ToggleFullScreen()
{

}
/// <summary>
/// 游戏全屏切换,true表示满屏
/// </summary>
/// <param name="graphics">图像资源</param>
/// <param name="game">游戏类</param>
/// <param name="isFullScreen">是否满屏</param>
public static void FullScreen(GraphicsDeviceManager graphics,
Game game,bool isFullScreen)
{
if (isFullScreen)
{
graphics.GraphicsDevice.PresentationParameters.IsFullScreen = true;
graphics.PreferredBackBufferWidth = 1024;
graphics.PreferredBackBufferHeight = 768;
game.Window.AllowUserResizing = false;
}
else
{
graphics.GraphicsDevice.PresentationParameters.IsFullScreen = false;
GraphicsAdapter adapter = graphics.GraphicsDevice.CreationParameters.Adapter;
graphics.PreferredBackBufferWidth = adapter.CurrentDisplayMode.Width;
graphics.PreferredBackBufferHeight = adapter.CurrentDisplayMode.Height;
}
graphics.ToggleFullScreen();

}
}

但是,我仔细观察了下游戏屏幕,在游戏角度观察时,屏幕的上面有一行噪波感觉的东西,是为什么引起的,就不是很清楚了,难道是我写的这个东西运算太多的原因???

分享到:
评论

相关推荐

    grpcio-1.44.0-cp39-cp39-manylinux2010_x86_64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    grpcio-1.42.0-cp38-cp38-macosx_10_10_x86_64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    江西省抚州市信通网络科技有限公司主页图标修正版

    各页面加入图标 新网站,新气象。

    C评级客户流失率相对误差.jpg

    C评级客户流失率相对误差

    tensorflow-2.9.3-cp39-cp39-win-amd64.whl

    python爬虫数据可视化

    Python初级贪吃蛇代码

    内容概要: 简单的贪吃蛇游戏,拓展、可移植性高。 适用人群: 不限。 使用场景: 不限。

    cryptography-38.0.0-cp36-abi3-manylinux_2_24_x86_64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    笔记本显卡RTX 4060 GPU 驱动程序

    笔记本显卡RTX 4060 GPU 驱动程序

    LCD取模软件PCtoLCD2002和Image2Lcd 2.9

    LCD取模软件PCtoLCD2002和Image2Lcd 2.9

    aTrustInstaller.pkg

    Mac系统aTrust客户端-2.3.10-SP4

    grpcio-1.37.0-cp39-cp39-manylinux2010_x86_64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    基于协同过滤、矩阵分解、gvdt+lr、wide&deep等算法的推荐模型python实现源码含项目说明+数据集.zip

    【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于协同过滤、矩阵分解、gvdt+lr、wide&deep等算法的推荐模型python实现源码含项目说明+数据集.zip 推荐算法的实现,python、jupyter双版本,详尽注释。 正在努力更新中... #### 对MovieLens电影评分小型数据集做Top N推荐: 0. baseline--推荐最热门的N=20部电影,precision=11%, recall=4%, coverage=0.2%, popularity=169。这部分内容包含在UserCF.py 1. UserCF,precision=25%, recall=10%, coverage=10%, popularity=4.4 2. ItemCF,precision=26%, recall=10%, coverage=15%, popularity=4.3 #### 对MovieLens电影评分小型数据集做评分预测: 0. baseline--使用所有评分的均值做预测,MAE:0.83。这部分内容包含在LinearRegression_Rating.ipynb 1. BiasSVD,MAE:0.68 2. LinearRegression,MAE:0.61 #### 对criteo广告展示小型数据集做点击率预测 1. gbdt+lr,binary_logloss:0.4783 #### 对Census数据中的收入做二分类 0. Google TensorFlow Guide上的Wide&Deep基准模型准确率: 0.83。(从有的知乎博主分享的链接来看,已经打不开了) 1. Wide&Deep, accuracy: 0.8587

    基于C++实现的连接池、线程池、内存池、对象池项目源码含项目说明.zip

    【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于C++实现的连接池、线程池、内存池、对象池项目源码含项目说明.zip ## CPP连接池 ### 关键技术点 MySQL数据库编程、单例模式、queue队列容器、C++11多线程编程、线程互斥、线程同步通信和 unique_lock、基于CAS的原子整形、智能指针shared_ptr、lambda表达式、生产者-消费者线程模型 ## CPP线程池 ### 关键技术点 作为五大池之一(内存池、连接池、线程池、进程池、协程池),线程池的应用非常广泛,不管是客户 端程序,还是后台服务程序,都是提高业务处理能力的必备模块。有很多开源的线程池实现,虽然各自 接口使用上稍有区别,但是其核心实现原理都是基本相同的。 ## CPP内存池 ### 关键技术点 读一下STL和nginx的内存池实现,并且单单的内存池的地方项目提取出来,方便后面对于不同类型的内存池进行分析 ## 对象池 ### 关键技术点 对于new和delete,malloc和free的源码进行阅读,对于创建对象需要多次创建和释放的的情况实现一个对象池 实现的方案使用Queue进行创建

    Maven是一个项目管理和构建自动化工具

    maven安装与配置

    基于html的六一儿童节祝福网页

    基于html的六一儿童节祝福网页,这个页面展示了一个简洁的儿童节祝福界面,包含一个标题、祝福文字和几张示例图片。你可以根据需要替换示例图片的链接和文字内容。

    基于Python实现的车牌检测和识别系统

    车牌检测和识别项目介绍 车牌的检测和识别的应用非常广泛,比如交通违章车牌追踪,小区或地下车库门禁。在对车牌识别和检测的过程中,因为车牌往往是规整的矩形,长宽比相对固定,色调纹理相对固定,常用的方法有:基于形状、基于色调、基于纹理、基于文字特征等方法,近年来随着深度学习的发展也会使用目标检测的一些深度学习方法。该项目主要的流程如下图所示: 1.输入原始图片,通过二值化,边缘检测,和基于色调的颜色微调等办法检测出原图中的车牌号的位置; 2.把检测到的车牌(ROI)裁剪,为车牌号的识别做准备; 3.基于裁剪的车牌号,使用直方图的波峰波谷分割裁剪的车牌号(如上图中的第3步) 4.训练机器学习模型做车牌识别,这里训练了2个SVM,一个SVM用来识别省份简称(如 鲁),另一个SVM用来识别字母和数字。 5.通过PyQt5把整个算法封装成GUI程序,并打包发布安装软件。

    超市积分管理系统的设计与实现

    本文从超市会员管理的实质入手,从本质区别超市会员管理与其他商业消费的会员管理的根本区别,针对专一积分管理提出看法,希望让系统更适用于商业超市的发展。让积分制度实施在一个合适的领域内,并不是所谓的通用格式,而是一个适合超市的专属模式。因此设计开发一种适合超市使用的会员积分管理系统可以实效得解决问题,能够让超市的会员真实的感受到会员积分带来的好处。 本系统是专门设计适用于超市的会员积分管理系统。整体采用B/S架构开发,通过对系统深入细致的分析,以及对业务背景和需求的了解,结合流行成熟的Web开发技术J2EE,设计搭建双管理权限。系统的总体技术框架为JSP+Servlet+JavaBean。前台浏览器浏览,后台服务器直接连接SQL Server2000数据库。通过各客户端计算机接入会员积分的各项事务,实现积分管理的规范性和安全性。同时作为会员信息管理系统的组成部分,将来可以有很好的扩展性和通用性。

    2022年中兴1.5.0 内附教程

    2022年中兴1.5.0 内附教程 应该是中兴22年下半年之前的光猫,自己看教程。

    matlab仿真:智能微电网PSO优化算法

    matlab仿真程序,智能微电网PSO优化算法

    iOS Object-c 实现界面横竖屏切换源代码

    iOS Object-c 实现界面横竖屏切换源代码

Global site tag (gtag.js) - Google Analytics