知识大全 3D跳棋游戏
Posted 知
篇首语:别裁伪体亲风雅,转益多师是汝师。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 3D跳棋游戏相关的知识,希望对你有一定的参考价值。
Java游戏编程杀手:3D跳棋游戏 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
这章用一个Java D例子来描述一个 D跳棋 这个例子建立了一个场景 包括 由一个暗绿色和兰色格相交平铺的 并带有标签的X轴和Z轴形成的平面 一个兰色背景 一个可以在两个不同方向浮动的球体 用户可以通过鼠标来浏览(拉近放远)场景 左边的截图 显示最初视图 右边的图是用户视图移动一些之后的效果Figure Initial view and later D跳棋阐述了Java D编程中一些常用的方法和一些小窍门 例如 D场景使用Canvas D类来实现显示(这个类和Swing组件结合使用) 所有的Java D程序需要一个场景图 D跳棋说明了如何增加基本图形 灯光 背景 这些场景图形成了文件的可视形式 记录这些场景信息的文本版本通过Daniel Selman的Java dTree包很容易就能实现 (在这节的最后我会详细介绍) 地板和球体使用了Java D的QuadArray Text D and Sphere几何类 地板是由QuadArray的一系列四边形组成 标签是用Text D对象沿着地板上的主轴形成 用户通过一个观察点查看这个 D世界 你将看到如何初始放置观察点 在使用Java D的OrbitBehavior 类时候如何移动观察点 D跳棋类图 图 的类图说明了 D跳棋程序的public和private数据项和方法
Figure Class diagrams for Checkers D Checkers D 是程序的顶层JFrame WrapCheckers D 是场景图拥有的 JPanel 作为一个Canvas D 对象 他是可视的 CheckerFloor 建立地板的子图(例如方格 轴) with所有同颜色的方格用单独的ColoredTiles 对象表示 提示 例子的原代码在Checkers D/目录(可能是原书附带光盘) Java D和Swing 的结合 就向Swing文本和按纽 Checkers D 是GUI控制位置的的一个 JFrame 把他放在必要的地方 在这个例子中 他建立一个WrapCheckers D (一个 JPanel) 实例 并把他放在 BorderLayout 中间
c setLayout( new BorderLayout( ) ); WrapCheckers D w d = new WrapCheckers D( ); // panel for D canvas c add(w d BorderLayout CENTER);
场景中的Canvas D 视图建立在WrapCheckers D 类里public WrapCheckers D( ) setLayout( new BorderLayout( ) ); // other initialization code GraphicsConfiguration config = SimpleUniverse getPreferredConfiguration( ); Canvas D canvas D = new Canvas D(config); add( Center canvas D); // other initialization code
虽然 Canvas D 是一个重量级的GUI 元素(一个系统产生窗口的轻量层) 还是有一些必须注意的 重量级的组件没那么容易与Swing控件组合(Swing是一个轻量组件) 这些控件主要由Java产生 如果 Canvas D 对象内嵌到一个 JPanel问题就可以消除 并且建立出来的panel可以安全地和Swing程序的其他部分结合 提示: 这是在的一个关于结合 Canvas D 和Swing的详细讨论 () 相比前几章 这里没有update/draw循环 因为Java D自身有机制来监视场景和最初视图的变化 下面以伪代码给出算法while(true) process user input; //用户输入 if (exit request) break; perform behaviors; if (scene graph has changed) //场景改变 traverse scene graph and render; //移动场景视图
其中的behaviors是一些影响其他部分图象的代码 比如移动的图形或改变灯光 他们用来监视图象 传递给程序中非 D部分详情 详细代码比例子中的伪代码更加复杂 Java D用多线程来并发移动和图形描述 因此 对这个过程有一个概括了解会对本章其他部分的理解有帮助 场景图形建立 场景图形用 WrapCheckers D的构造函数建立public WrapCheckers D( ) // initialization code GraphicsConfiguration config = SimpleUniverse getPreferredConfiguration( ); Canvas D canvas D = new Canvas D(config); add( Center canvas D); canvas D setFocusable(true); // give focus to the canvas canvas D requestFocus( ); su = new SimpleUniverse(canvas D); createSceneGraph( ); initUserPosition( ); // set user s viewpoint orbitControls(canvas D); // controls for moving the viewpoint su addBranchGraph( sceneBG );
Canvas D 对象用从getPreferredConfiguration( );获得的配置来初始化 这个方法能取得硬件的图形信息 一些老的Java D程序没有初始化一个GraphicsConfiguration 对象 而是用null作为 Canvas D 的构造函数的参数 这种编程可不太好 canvas D 被设置成焦点 以便键盘能传递动作给场景图形 这些动作的触发通常是按键的按压和弹起 但是他们也能由定时器 帧的改变和由Java D内部产生的事件触发 Checkers D就不需要设置焦点 因为他没有任何动作 因为在所有的其他程序中我们都会考虑到线条 所以我没有给出线条的描绘代码 su SimpleUniverse 对象建立了标准子视图 场景图形的VirtualUniverse 和Locale 节点 createSceneGraph( ) 设置了灯光 天空的背景 地板 还有浮动球体 initUserPosition( ) 和 orbitControls( ) 处理用户视角问题 最后把配置好的 BranchGroup 加入到方法private void createSceneGraph( ) sceneBG = new BranchGroup( ); bounds = new BoundingSphere(new Point d( ) BOUNDSIZE); lightScene( ); // add the lights addBackground( ); // add the sky sceneBG addChild( new CheckerFloor( ) getBG( ) ); // add floor floatingSphere( ); // add the floating sphere pile( ); // fix the scene // end of createSceneGraph( )
使用不同的方法来增加子图到 sceneBG以建立需要的子视图 一旦图形被绘制完毕后 并允许Java D来优化他 sceneBG 便只被编译一次 优化包括重排图形 重新组合编译节点 例如一连串的包含不同转换的TransformGroup 节点会被编译成一个独立节点 另一个可能的优化是把具有相同显示属性的图形编成组 以便能更快地描绘 bounds是一个 BoundingSphere 类的全局实例 他用来指定环境节点对灯光 背景和OrbitBehavior 对象的影响 跳跃的球体被放在场景的中心 被赋 BOUNDSIZE 单位半径 并影响场景中所有事件 最后的 WrapCheckers D( ) 所显示的场景图象在图 中 Floor Branch 节点是我发明出来掩藏一些细节 稍后将会涉及 图 所缺少的是场景图形的分支部分 场景灯光 通过 lightScene( ) 把一个环境灯光 两个有向灯光加入到场景中 环境灯光能到达场景中的每个角落 并且强度相同Color f white = new Color f( f f f); // Set up the ambient light AmbientLight ambientLightNode = new AmbientLight(white); ambientLightNode setInfluencingBounds(bounds); sceneBG addChild(ambientLightNode);
代码设置了灯光的颜色 环境灯光以bounds配置建立 并加入到场景中 类 Color f( ) 的构造函数设置RGB颜色为 f到 f( f是全色) 有向灯光模拟的一个从原处照射来的一束灯光 并从特定方向碰上物体表面 有向灯光和环境灯光的区别是有向灯光必须是方向向量Vector f light Direction = new Vector f( f f f); // left down backwards DirectionalLight light = new DirectionalLight(white light Direction); light setInfluencingBounds(bounds); sceneBG addChild(light );
Figure Partial scene graph for Checkers D 方向是介于( )和( )的向量 灯光可以想象成是很多从不同方向 不同来源的平行灯光汇聚而成 点光和场光是Java D灯光的另外一种形式 点光放置在空间中 并向所有方向发射 场光以特定方向朝点光聚焦 场景的背景 场景的背景可以指定为特定的背景(如下所示) 一个静态图像或这是一个带形体的几何材质 Background back = new Background( ); back setApplicationBounds( bounds ); back setColor( f f f); // sky color sceneBG addChild( back ); 浮动的球体 Sphere 是来自Java D的 sun j d utils geometry 包的一个工具类 是Primitive 类的一个子类 Primitive 类为带有 Shape D 孩子节点的一个 Group 节点 他的几何特性存储在Java D的 TriangleStripArray 这种类把球体看成一组可连接的三角形体 我没必要校准他的几何特性 但是他的现实和位置要改变 Appearance 节点是一个包含很多信息的容器 包含颜色 线条 点 多边形 描绘 透明度和材质特性 ColouringAttributes 确定形体的颜色 而且不受场景灯光影响 如果一个形体需要颜色和灯光的交互作用 就要用到 Material 组件 灯光要影响形体的颜色必须满足三种情况 &# ; 形体的几何特性必须是标准的 &# ; 形体的 Appearance 节点必须拥有 Material 组件 &# ; Material 必须用 setLightingEnable( )打开他的光照允许 用工具类 Sphere 能自动制作成标准形体 所以第一种情况容易满足 形体颜色 Java D Material 组件控制当一个形体被不同种类的灯光照射后的颜色
Material mat = new Material(ambientColor emissiveColor diffuseColor specularColor shininess);
环境颜色参数指定当形体被环境灯光照射后的颜色 他给对象统一的颜色 放射性颜色贡献形体生成的颜色 这个参数经常被设置成黑色(相当于关闭) 当照射的时候 发散颜色就是对象的颜色 他的强度取决于光波照射到形体的角度 提示 发散灯光和环境灯光通常被设置成相同 这与真实世界中的对象被照射时候的颜色一样 镜子颜色参数的强度与从形体的光亮区域反射出的多少有关 他由控制reflective highlight尺寸的发光参数组合成 提示 镜子颜色通常设置成白色 符合真实世界中大部分对象产生的颜色 Checkers D类中 有两个不同方向的光 他们在球体顶部建立了两个不同的光路(如图 ) 地板在他们的颜色未在形体的几何特性中设置前 是没有被照射到的 floatingSphere( ) 中处理形体现实的代码如下Color f black = new Color f( f f f); Color f blue = new Color f( f f f); Color f specular = new Color f( f f f); // near white Material blueMat= new Material(blue black blue specular f); blueMat setLightingEnable(true); Appearance blueApp = new Appearance( ); blueApp setMaterial(blueMat);
布置形体 形体放置一般是在TransformGroup 下放置图形节点 (参见图 sphere Group) 一个 TransformGroup 用来放置 旋转和度量旗下节点 他由Java D Transform D 对象定义其格式Transform D t d = new Transform D( ); t d set( new Vector f( )); // place at ( ) TransformGroup tg = new TransformGroup(t d); tg addChild(new Sphere( f blueApp)); // set the sphere s radius and appearance // and its normals by default sceneBG addChild(tg);
set( ) 方法将形体的中心放置在( ) 重置先前的旋转和度量 在重置其他格式的时候 set( ) 能用来改变度量和角度 方法setTranslation( ) setScale( )和setRotation( ) 只能对已给格式起作用 与其他 D画图程序包不同的是 Java D中的Y轴是垂直方向 而水平面由xoz决定 如图 球体的位置被设置为( ) 在XOZ面中心上方 个单位cha138/Article/program/Java/hx/201311/25930
相关参考
来个大型的3d手游,1g以上的大游戏,谷歌不要地牢猎手5狂野飙车8n.o.v.a近地联盟先遣部队什么的找大型的游戏王游戏,1G以上最好暂时没有这样的游戏,有的话我也想玩。怎么下载电脑大型3D射击单机游
现在最多人玩的3d网游是什么游戏诛仙二,貌似免费,很烧钱的。完美国际,可以,就是老了点,里面都是老玩家。天下贰,网易的,还不错。热血江湖,Q版的,画面好,耐玩。征途,奇迹世界。。。。。。最多人玩的3d
VisualC#编写3D游戏框架示例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!你可能对实际地编
现在3D的武侠网路游戏那个玩的人最多,又好玩? 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!现在3
知识大全 要一套3000元左右电脑配置单,主要玩大型3D单机游戏的。
要一套3000元左右电脑配置单,主要玩大型3D单机游戏的。 以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
知识大全 能玩大型网络3D游戏不卡的!运行速度快的,能装win7的
求大神帮忙配台3000左右的游戏电脑(台式)!能玩大型网络3D游戏不卡的!运行速度快的,能装win7的! 以下文字资料是由(全榜网网www.cha138.com)小编为
知识大全 为什么我诺基亚7500不能手机游戏3D鬼泣啊,一开始就是应用软件错误
为什么我诺基亚7500不能手机游戏3D鬼泣啊,一开始就是应用软件错误 以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一
知识大全 想买一款价效比高的笔记本,价格在3000以内的,玩游戏尽可能的要流畅些,能玩大型3D游戏更好,有大虾推荐
想买一款价效比高的笔记本,价格在3000以内的,玩游戏尽可能的要流畅些,能玩大型3D游戏更好,有大虾推荐 以下文字资料是由(全榜网网www.cha138.com)小编为
知识大全 配置一台玩游戏的台式电脑,3000至3500左右,列表详细点,3D网游,英雄联盟,DNF玩着不卡的。
配置一台玩游戏的台式电脑,3000至3500左右,列表详细点,3D网游,英雄联盟,DNF玩着不卡的。 以下文字资料是由(本站网www.cha138.com)小编为大家搜
知识大全 有朋友近期想组装一台电脑,预算在4000元左右,主要是玩游戏,3D之类的高端网游,还想请教各位大神
有朋友近期想组装一台电脑,预算在4000元左右,主要是玩游戏,3D之类的高端网游,还想请教各位大神! 以下文字资料是由(全榜网网www.cha138.com)小编为大家