存档

2012年7月 的存档

iPhone / iPad game application dev tools

2012年7月29日 没有评论

So I’ve spent the past week researching on all the different tools you can use to create an iPhone or iPad application game and I still haven’t reached a conclusion on which software ( Xcode, unity, mono touch or oolong engine ) to use.

What I am wanting to create are simple yet fun games like ( Fruit Ninja or Cut the rope ).

I’ve tried researching the software the above games use but no luck.

Can anyone point me into the right direction?

Many thanks!

For us “monotouchers” the best tool for 3D game development on iPhone/iPad doesn’t exist yet IMHO.

MonoTouch MonoGame is still too limited, and Cocos2D lacks 3D and is too complex and cumbersome.

But the solution is coming in the future from the Apple “Scene Kit” Framework.

SceneKit is an intuitive wrapper for OpenGL, similar to the Core Animation data visualization API introduced by Apple in OSX Mountain Lion, and consistent with the APIs of Apple’s other graphical frameworks.
Scene Kit is designed to import COLLADA 3D objects, and provides intuitive tools for manipulating scenes, lights, cameras, meshes, bounding volumes, geometry, materials and shaders.

For now SceneKit is only available on Mountain Lion, but in the future it will be available on the iOS platform. And I’m sure that the Xamarin guys will be ready to provide us with a MonoTouch version of the library when it will be included in the next iOS SDK.

You can read about the Scene Kit framework here:

Scene Kit on Mountain Lion – Ars Technica Review

Apple WWDC 2012 Session 504 Video: Introducing Scene Kit

Apple WWDC 2012 Session 504 Slides : Introducing Scene Kit

SceneKit in Mountain Lion review by Jonathan Blocksom, iOS course co-creator

Scene Kit Programming Guide

Scene Kit Editor

http://www.levelhelper.org/

http://cocosbuilder.com/

http://www.codeandweb.com/

http://www.cocos2d-x.org/

Well, First of all, you need to determine what is your game gonna be, 2D or 3D, depending on your question, you want a 2D game, that’s great, there is a lot of engine around the internet that have a great resources and tutorials, you can try Cocos2d, It has a very powerful capabilities and it’s community is great.

You can see a list of game engins in this site.

Happy coding.

I just have two questions.

  • What languages do you already know?
  • Do you wish to do cross platform to Android later?

With Cocos2D it is iOS specific (I think?) and would require a full re-write to support Android.

I am familiar with XNA and C# so the use of MonoGame was my first choice.
I’d build my own game engine within it, but then using that same engine with little changing I should be able to get it to also run on Android, Windows Phone 7, Windows, Linux and OSX.

You can see the platform support matrix here

Using something like Unity3D or even UDK is handy as the engine is pre-built and you can do some amazing things with them for 2D games they can be tricky to get them to do what you want.

Here you can find a detailed list of tool which work with Cocos2D: http://abitofcode.com/2012/07/cocos2d-useful-tools/

If you want you can found a tutorial here which explain you how to make a Fruit Ninja game using Cocos2D.

Corona is probably the best choice. I haven’t made a game in it myself, but I have been developing a 2D game engine for iOS with a Lua interface. Corona is also programmed in Lua, which is a very popular (in the game industry) and easy to learn script language. Corona seems to have a good toolchain and there are a lot of third party software to help you design levels, sprites etc. There are plenty of discussions on the internet about it an Cocoas 2D if you google. The consensus seems to be that Corona is easier to use, but that Cocos2D has the advantages that come from being open source: easy to customize, merge with other code, community etc.

分类: stackoverflow精选, unity3d 标签:

Versions比对版本功能 FileMerge 无法找到的解决办法

2012年7月26日 没有评论

猴子原创,欢迎转载。转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢!

原文地址: http://www.cocos2dev.com/?p=287

今天用Versions的对比功能查看修改了什么的时候,提示"The FileMerge application could not be located.Please install Xcode Tools from the Apple Developer website."

 

我查看Xcode的tool中,可以看到FileMerge,出现这个的原因,一般是直接首次安装xcode4.3.3,系统没有设置xcode路径的原因。从老版本 升级到4.3.3的不会出现该问题。

 

解决办法:

 

打开终端.输入"sudo xcode-select -switch /Applications/Xcode.app"

我的Xcode是在应用程序中,如果你的不是的话,将/Applications/Xcode.app替换为自己的xcode路径就可以了。

 

(xcode直接拖到终端的话,可以自动补全路径的哦)。

分类: 未分类 标签:

Custom fonts in Cocos2d [closed]

2012年7月26日 没有评论

Label font is not working, I have added fonts folder under asset folder.

pop = CCLabel.makeLabel("Eggs left: ", "fonts/comic.ttf", 14);
CCLabel labelMainMenu = CCLabel.makeLabel("OPTIONS MENU", "Fonts/JimboStd-Regular.otf", 20);

I Think you forgot to mention the font size in float. and see that the fonts folder is created in assests …

This was happening because of android-cocos2d.jar.. I have replaced with new jar and now its giving me changed fonts..

分类: cocos2d, stackoverflow精选 标签:

Unity3D+免费工具开发2D游戏之三:创建人物动画

2012年7月26日 没有评论

原文地址: http://www.rocket5studios.com/tutorials/make-a-2d-game-with-unity3d-using-only-free-tools-part-3/

原版翻译,转载请注明出处:http://blog.csdn.net/ariel7321/article/details/7777157


本节中,我们将加入主角、挂钩一些脚本、给梯子和绳索添加碰撞,最后主角可以在这个关卡里移动。

点击这里查看本节完成后的效果:点我!

制作主角的精灵图集

如果你跟着我这个教程,你肯定会为主角的移动而兴奋,因此我们用TexturePacker先制作一个精灵图集。

Download
the source sprite .png’s
 ,解压到项目中。如果你在第二节中已经做过了就跳过此步骤。

打开TexturePacker ,并将sprites/player目录下的所有.png文件都拖到Sprites面板中。


Texture Settings / Layout:

  • Algorithm 设置成Basic。
  • Border Padding设置为1.
  • Shape Padding设置为1.
  • 不勾选Trim。

Texture Settings / Output:

  • 保留Data格式为cocos2d。
  • 在Data File中,点击…,将输出保存到项目的Assets下(我保存在Assets/SpriteAtlases),保存为“player”。
  • TexturePacker 自动给文件加了后缀.plist,但是Unity需要.xml文件,因此我们将.plist改为.xml。
  • Texture File路径应该也被设置成和Data File一样的了。

如果你按照我上面的步骤去做,TexturePacker的设置就如下图所示:

Unity3D+免费工具开发2D游戏之三:创建人物动画

如果你点击Publish,然后切换到unity你就会在项目视图里看到SpriteAtlases 文件夹,在此文件夹下看到精灵贴图和精灵数据文件。

我们需要在Unity里做些修改让它看起来正确。
  • 在项目视图里选择player.png,在Inspector 中将Filter Mode改为Point。
  • 点击 Override for Web,将Format 设置成Truecolor ,然后点击Apply。

制作主角精灵

我们用Orthello 2d将主角精灵图集变为动画精灵。
精灵容器:
  • 在unity的项目视图,点开orthello:Orthello
    –> Objects –> Sprites –> SpriteAtlas,然后将 SpriteAtlas-Cocos2D拖到Hierarchy中。
  • 在Hierarchy窗口,点开OT->Containers,你会发现出现了一个新的Container,名字类似Container
    (id=-6840)
    “,这个Container将会包容我们关卡需要的所有的精灵,所有我们可以命名它为“player”。
  • 将“player.png”拖放到“OTSprite
    Atlas Cocos 2D” 脚本的Texture位置。
  • 将“player.xml”拖放到“OTSprite
    Atlas Cocos 2D” 脚本的
    Atlas Data File 位置。

建立主角动画:
  • Animation 对象拖到Hierarchy中 Orthello
    –> Objects –> Sprites
     ,这将会在OT –> Animations下添加一个新的对象,名字类似 “Animation
    (id=-4320)
    “,将其重新命名为“player anims”。
  • 点选刚创立的动画对象,将设置修改为下图所示的。
  • Framesets下,将Size设置为9.
  • 为了填充Container区域,将 OT –> Containers 下的player拖放进去。

Unity3D+免费工具开发2D游戏之三:创建人物动画

制作主角精灵

  • 然后将Orthello –> Objects –> Sprites 下的AnimatingSprite 拖放到Hierarchy中,这会给场景添加一个新的对象,名字类似“Animating
    Sprite (id=-23050)
    “。将名字改为“player“。
  • 将“player anims”拖放到“player”的Animation位置。 Sprite Container位置会被自动填上“player”容器对象。如果没有,你可以自己将“player”容器对象拖放到此位置。
  • 此时你应该看到player精灵在场景中,如果你播放,你会看到player的动画在一直播放。但我们不希望动画在一开始就播放,所以将 Play On Start的勾选去掉。

给主角添加碰撞检测


为了使主角能正确的和梯子绳子进行碰撞,我们需要做以下设置:

  • 选中player,勾选“OTAnimating
    Sprite
    ”下的Collidable,这会给对象自动添加一个Rigidbody。
  • 点开Physics旁的下拉菜单,选择Custom。
  • 在Transform中,将Scale Z设为1.
  • 将Depth改为-1.
  • 在Box Collider中,将Center Y改为-0.1,Z改为1. 将Size X改为0.45, Y改为0.6,Z改为0.4.


如果你按照上面的步骤去做了,那么你将得到下面图示结果:

Unity3D+免费工具开发2D游戏之三:创建人物动画


将Depth改为-1以及将Box
Colider的Z改为1,这会使主角靠近摄像机一些,使碰撞器在Z轴的0位置。这样做有两个效果:首先可以保证主角始终在关卡背景的前面而不会被挡住,其次保证碰撞器在Z轴的0位置使之可以和梯子绳子进行碰撞。这听起来玄乎,但是你看看下图就明白是怎么回事了:

Unity3D+免费工具开发2D游戏之三:创建人物动画


设置射击动画


我们需要添加另外一个动画,当我们按下开火键时,会有子弹从主角身上发出,并撞击地面。


制作射击动画

  • 将Orthello –> Objects –> Sprites中的Aniamtion对象拖放到Hierachy中。这会在OT
    –> Animations下创建一个新的名字类似“Animation (id=-4320)“的对象,将其重命名为“shoot anims”。
  • 点选“shoot anims”对象,将设置设成下图所示。将OT
    –> Containers下的level容器拖放到Container 区域。

Unity3D+免费工具开发2D游戏之三:创建人物动画


制作射击精灵

  • 然后将Orthello –> Objects –> Sprites 下的AnimatingSprite 拖放到Hierarchy中,这会给场景添加一个新的对象,名字类似“Animating
    Sprite (id=-23050)
    “。将名字改为“shoot“。
  • 将“shoot anims”拖放到“shoot”的Animation位置。 Sprite Container位置会被自动填上“level”容器对象。如果没有,你可以自己将“level”容器对象拖放到此位置。
  • Transform
    Position X设置为-1,这样就会使其位置在主角精灵的左侧。
  • 将深度Depth改为-1,这样它始终在关卡背景的前面。
  •  Frame
    Index设置为18.
  • 此时你应该看到shoot精灵在场景中,如果你播放,你会看到shoot的动画在一直播放。但我们不希望动画在一开始就播放,所以将 Play On Start的勾选去掉。
  • 我们只希望在主角真的发射子弹时子弹才出现,所以我们把 Mesh
    Render给勾掉,隐藏子弹动画,直到我们用脚本来重新打开它。


给子弹精灵加个父节点


我们希望子弹精灵跟随者主角,我们也希望能根据主角的面向来左右翻转这个精灵。

  • 创建空对象 Object –> Create Empty。
  • 将其命名为shoot
    parent
    ”,并是Position在0、0、0位置。
  • 在Hierarchy中,将shoot精灵拖放到shoot parent上,使shoot成为shoot parent的子节点对象。
  • 将shoot parent对象拖放到player精灵上,使之成为player精灵的子节点对象。

如果你按照我的步骤,你的Hierarchy就跟下图差不多。注意,为了使结构更紧凑,我把所有level相关的对象都放到了一个名为“LEVEL”的空对象下了。

Unity3D+免费工具开发2D游戏之三:创建人物动画

注意:为了使后面的脚本能正确的工作,player下的子节点对象的名字一定要和上图中的一模一样。


添加脚本


我们终于要添加脚本来使主角移动了。

  • Download
    the player scripts
     下载脚本,解压到你电脑硬盘中。
  • 将里面的脚本拖放到项目的Asset文件夹里。
  • 创建一个空游戏对象Game
    Object –> Create Empty。
  • 将新对象命名为“Scripts”。
  • xa.cs脚本文件拖放到Scripts对象上。
  • player.cs 和
     playerAnims.cs
    脚本文件拖放到player对象上。
  • 确保主角站在一个砖上,这样他不会掉下去。要记住,实际上是主角的Box Collider和其它物体碰撞,而不是可见主角精灵,所以要使主角的位置像0,0,-1(x,y无所谓,但是z一定要保持在-1)。

好了,如果你按照了以上所有步骤,那么此时当你播放这个游戏,你会发现主角能够站在砖上而不会掉下去了。并且当你按键盘上的左右方向键时主角会跟着移动,而且还有动画。

本教程并不解释脚本如何工作的,但是我在脚本里做了注释,希望能帮到你。如果你有任何的疑问,你可以在回复中提问,也可以给我email。


给梯子加碰撞


创建一个梯子碰撞体

  • 创建一个Cube,GameObject
    –> Create Other –> Cube。
  • 将Cube命名为“Ladder”。
  • 打开Tag Manager,Edit
    –> Project Settings –> Tags。
  • 创建“Ladder”和“Rope”两个Tag。
  • 让我们再创建一个层Layer “NoDraw”。
  • 现在将Ladder对象的Tag改为Ladder,Layer改为NoDraw。

在游戏视图中隐藏梯子碰撞体

  • 点击Main Camera。
  • 在Camera下面,打开Culling Mask下拉菜单,点掉NoDraw。这样在NoDraw层的物体都不会在游戏视图里看到了。


调整梯子碰撞体的大小和位置

梯子碰撞体需要比可见的梯子大一个单元,这就是说,如果你的梯子有4块拼图片高,那么碰撞体得有5个高。

  • 假设你的梯子有4个单位高:选择Ladder碰撞体,将Scale Y改为5.
  • 使用Vertex
    Snap
    将Ladder与梯子的底部拐角对齐。
  • 你可以复制这个Ladder,然后与其他梯子对齐。

你的Ladder应该跟下图所示一样:

Unity3D+免费工具开发2D游戏之三:创建人物动画

现在你按Play,当主角碰到梯子时,可以上下爬梯子了,可以从梯子的上下两端走出,如果你从梯子中间走出去,也可以从梯子的中间掉下来。

给绳子加碰撞

创建一个绳子碰撞体

  • 创建一个Cube,GameObject –> Create
    Other –> Cube。
  • 将Cube命名为“Rope”。
  • 现在将Rope对象的Tag改为Rope,Layer改为NoDraw。


调整绳子碰撞体的大小和位置


绳子碰撞体需要比可见的绳子大一个单元,这就是说,如果你的绳子有4块拼图片长,那么碰撞体得有5个长。

  • 假设你的绳子有4个单位长:选择Rope碰撞体,将Scale X改为5.
  • 使用Vertex
    Snap
    将Rope与绳子的底部拐角对齐。
  • 你可以复制这个Rope,然后与其他子对齐。

你的Rope应该跟下图所示一样:

Unity3D+免费工具开发2D游戏之三:创建人物动画

现在你按Play,当主角碰到绳子时,可以左右爬绳子了,可以从绳子的左右两端走出,如果你从绳子中间走出去,也可以从绳子的中间掉下来。


结尾


现在已经完成了主角的所有移动动作了:跑、爬梯子和绳子。下一讲我们将加入计分系统、打破砖块和捡起物体。

你可以下载本项目 download
the project up to this point
,也可以试玩本项目 play
the web version of the project here
.


如果你喜欢,请回复这篇博客,并关注我的 Twitter和 Facebook。你的支持会帮助这个教程的持续进行。这个博客是iDevBlogADay的一部分,这里面收集了一系列程序员开发的经验。






分类: unity3d 标签:

Unity3D在移动端的优化处理

2012年7月25日 没有评论

猴子原创,欢迎转载。转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢!

原文地址: http://www.cocos2dev.com/?p=285

今天去CGDC听了刘钢先生的Unity在移动端的优化处理,记录刘钢先生的优化建议。

 

一、关于性能优化的几大误区

 

误区1:性能优化只是程序员的责任,与美术和策划无关。

-技术美术和关卡设计师对于游戏性能承担着非常重要的责任

-程序员往往无法补救由于滥用美术资源而造成的性能问题

 

误区2:在制定了严格的美术规范之后,美术师就应该对一切美术问题负责,程序员不再与此有关

-程序员应该为美术师实现完整的美术资源合法性检查工具

-Tools speak louder than rules!

 

误区3:对于程序而言,性能优化应该从GPU/Shader的执行效率入手

-针对CPU端/游戏逻辑的性能优化往往能够取得更大的作用

-GPU/Shader的性能优化应该放在最后进行

 

未完…….待续…..

分类: 未分类 标签:

xcode 如何设置第三方库不使用ARC

2012年7月24日 没有评论

猴子原创,欢迎转载。转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢!

原文地址: http://www.cocos2dev.com/?p=283

xcode支持ARC技术,对于不熟悉内存管理的是个不错的办法,但是有时自己项目使用了ARC,但是自己在项目中使用第三方库继续引用ARC,可能导致一些莫名的错误,这是最好对第三方库不要使用ARC。

 

如何设置第三方库不使用ARC的方法:

 

对于某些我们不希望使用 ARC 的文件,例如第三方库源文件,可以在 Project Settings -> Build Phases 中,对这些文件选中 -fno-objc-arc 标志。这样 Xcode 编译项目时,这些文件就不会使用
ARC。

分类: 未分类 标签:

cocos2d-x与ios内存管理分析(在游戏中减少内存压力)

2012年7月24日 没有评论

猴子原创,欢迎转载。转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢!

原文地址: http://www.cocos2dev.com/?p=281

注:自己以前也写过cocos2d-x如何优化内存的使用,以及内存不足的情况下怎么处理游戏。今天在微博中看到有朋友介绍了下内存,挺详细的。不知道是谁写的,我记录下。

一,IOS与图片内存

在IOS上,图片会被自动缩放到2的N次方大小。比如一张1024*1025的图片,占用的内存与一张1024*2048的图片是一致的。图片占用内存大小的计算的公式是;长*宽*4。这样一张512*512 占用的内存就是 512*512*4 = 1M。其他尺寸以此类推。(ps:IOS上支持的最大尺寸为2048*2048)。

 

 

二,cocos2d-x 的图片缓存

Cocos2d-x 在构造一个精灵的时候会使用spriteWithFile或者spriteWithSpriteFrameName等 无论用哪种方式,cocos2d-x都会将这张图片加载到缓存中。如果是第一次加载这个图片,那就会先将这张图片加载到缓存,然后从缓存读取。如果缓存中已经存在,则直接从缓存中提取,免除了加载过程。

 

图片的缓存主要由以下两个类来处理:CCSpriteFrameCache, CCTextureCache

 

CCSpriteFrameCache加载的是一张拼接过的大图,每一个小图只是大图中的一个区域,这些区域信息都在plist文件中保存。用的时候只需要根据小图的名称就可以加载到这个区域。

 

CCTextureCache 是普通的图片缓存,我们所有直接加载的图片都会默认放到这个缓存中,以提高调用效率。

因此,每次加载一张图片,或者通过plist加载一张拼接图时,都会将整张图片加载到内存中。如果不去释放,那就会一直占用着。

 

 

三,渲染内存。

不要以为,计算内存时,只计算加载到缓存中的内存就可以了。以一张1024*1024的图片为例。
CCSprite *pSprite = CCSprite::spriteWithFile("a.png");

 

调用上边这行代码以后,可以在LEAKS工具中看到,增加了大约4M的内存。然后接着调用
addChild(pSprite);

 

这时,内存又增加了4M。也就是,一张图片,如果需要渲染的话,那它所占用的内存将要X2。

 

再看看通过plist加载的图片,比如这张大图尺寸为2048*2048。想要加载其中的一张32*32的小图片
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("b.plist");

此时内存增加16M (汗)

CCSprite *pSpriteFrame = CCSprite::spriteWithSpriteFrameName("b1.png");
b.png 大小为32*32 ,想着也就是增加一点点内存,可实际情况是增加16M内存。也就是只要渲染了其中的一部分,那么整张图片都要一起被加载。

 

但是情况不是那么的糟糕,这些已经渲染的图片,如果再次加载的话,内存是不会再继续升高的,比如又增加了100个b.plist的另一个区域,图片内存还是共增加16+16 = 32M,而不会继续上升。

 

 

四,缓存释放

如果游戏有很多场景,在切换场景的时候可以把前一个场景的内存全部释放,防止总内存过高.

CCTextureCache::sharedTextureCache()->removeAllTextures(); 释放到目前为止所有加载的图片

CCTextureCache::sharedTextureCache()->removeUnusedTextures(); 将引用计数为1的图片释放掉CCTextureCache::sharedTextureCache()->removeTexture(); 单独释放某个图片

CCSpriteFrameCache 与 CCTextureCache 释放的方法差不多。

值得注意的是释放的时机,一般在切换场景的时候释放资源,如果从A场景切换到B场景,调用的函数顺序为B::init()—->A::exit()—->B::onEnter() 。

可如果使用了切换效果,比如CTransitionJumpZoom::transitionWithDuration这样的函数,则函数的调用顺序变为B::init()—->B::onEnter()—->A::exit() 。

而且第二种方式会有一瞬间将两个场景的资源叠加在一起,如果不采取过度,很可能会因为内存吃紧而崩溃。

有时强制释放全部资源时,会使某个正在执行的动画失去引用而弹出异常,可以调用CCActionManager::sharedManager()->removeAllActions();来解决。

 

 

五,内存优化

优化的心得就是尽量去拼接图片,使图片边长尽可能的保持2的N次方并且装的很满。但要注意,有逻辑关系的图片尽量打包在一张大图里,另外一点就是打包的时候要考虑到层的分布。因为为了渲染效率可能会用到CCSpriteBatchNode;同一个BatchNode里的图片都是位于一个层级的,因此必须根据各个图片的层级关系,打包到不同的plist里。有时内存和效率不可以兼得,只能尽量平衡了。

 

 

六,其他

最后附一个各代IOS设备的内存限制情况
设备                                              建议内存                   最大内存
iPad2/iPhone4s/iphone4                170-180mb                 512mb
iPad/iPod touch3,4/iphone3gs          40-80mb                  256mb
iPod touch1,2/iPhone3g/iPhone1         25mb                    128mb

上述建议内存只是一些人自己测试的结果,可用的RAM不大于最大内存的一半,如果程序超过最大内存的一半,则可能会挂掉。
另外在LEAKS里查看模拟器中和真机总的内存,会有较大出入。在模拟器中的结果与实际更接近一些。

分类: 未分类 标签:

cocos2d-x 2.0 动画的创建(利用swf创建动画)

2012年7月23日 没有评论

猴子原创,欢迎转载。转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢!

原文地址: http://www.cocos2dev.com/?p=279

我之前介绍了cocos2d-x各种动画的创建方式,但是2.0修改了一些方法,又有很多朋友问我怎么创建动画,今天我再介绍下2.0的动画创建方式,希望大家看到了,能够自己学着创建其他方式的动画。

 

一、使用swf创建动画。

1、首先使用tp工具将swf导出成plist文件。

2、创建动画的方法:

#define kDelayPerUnit 0.08f

CCActionInterval* SAAnimationManager::createRFAnimFormSwf(const char* swfName,int frames){
    char str1[100] = {0};
    char str2[100] = {0};
    CCSpriteFrameCache *cache = CCSpriteFrameCache::sharedSpriteFrameCache();
    sprintf(str1, "%s.plist", swfName);
    sprintf(str2, "%s.png", swfName);
    cache->addSpriteFramesWithFile(str1,str2);
    CCArray* animFrames = CCArray::create(15);
    for(int i = 0; i < frames; i++){
        sprintf(str2, "%s.swf/%04d", swfName,i);
        CCSpriteFrame *frame = cache->spriteFrameByName(str2);
        animFrames->addObject(frame);
    }
    CCAnimation *animation = CCAnimation::create(animFrames, kDelayPerUnit);
    cache->removeSpriteFramesFromFile(str1);
    return CCRepeatForever::create(CCAnimate::create(animation));
}

参数介绍:

const char* swfName :swf的名字,记住swf的名字最好和plist的名字一样。如果你的swf名字和导出的plist名字不一样,你会发现pilst里面的每一帧的名字是swf的名字,plist是你取的名字,就会有两个不同的名字,这样在加载里面每一帧的时候就注意了名字了。

int frames:swf的帧数。

 

这样就会返回一个永久性的动画,你就可以用一个sprite->runAction()的方式显示这个动作了。

分类: 未分类 标签:

Unity3D+免费工具开发2D游戏之二:制作关卡1的界面

2012年7月23日 没有评论

原文地址:http://www.rocket5studios.com/tutorials/make-a-2d-game-with-unity3d-using-only-free-tools-part-2/


原版翻译,转载请注明出处:http://blog.csdn.net/ariel7321/article/details/7771638


第一节中我们介绍了一些工具和插件,并设置了下项目,本节将介绍如何创建关卡。


虽然在第一节中介绍了很多插件,但我们重点在Orthello上。


初始化项目


在我们开始制作关卡精灵前需要对项目设置做一些改变。


Build Settings:

  • File –> Build Settings…
  • 点击Web Player,点击switch platform。
  • 关闭Build Settings窗口。

Player Settings:

  • Edit –> Project Settings –> Player。
  • Per-Platform
    Settings下点击网状球的图标。
  • Resolution
    and Presentation中将Screen Width改为800,Screen Height改为600.

Render Settings:

  • 因为在2d游戏中我们不用光照系统,所以我们在这调节下unity默认的环境光,使之更亮点。
  • Edit –> Render Settings…
  • 点击 Ambient Light,然后将颜色改为 (255, 255, 255, 255)。


初始化Orthello 2D


  • 在unity的项目视图里,进入 Orthello
    -> Objects
    ,然后将OT prefab拖到Scene中或是Hierarchy中。(第一节做过了)
  • 点开OT对象,然后点击View
  • 修改Pixel
    Perfect Resolution为800*600.
  • 修改Custom
    Size为10

此时,如果你点击Main
Camera,你会发现它被改为正交投影了,而且大小被改为10了。

此时你的项目看起来像下面的图(注意,这里我加入了一个Cube用来比较规模):

Unity3D+免费工具开发2D游戏之二:制作关卡1的界面

Download
the project up to this point
.


制作关卡精灵图


好了,所有的初始化设置都OK了,现在到了深入进去的时候了。Lode
Runner里面的关卡都是由一些简单的贴图拼起来的:砖(可以被挖开的),混凝土(不可挖的),梯子和绳索。

  • 下载资源sprite.png,然后解压。
  • 启动TexturePacker,然后将sprites/level文件夹下的png文件都拖放到Sprites面板。
  • sprites/shoot文件夹下的png文件也都拖放到Sprites面板中。

Texture Settings / Layout:

  • Algorithm 设置成Basic。
  • 不勾选Trim。
  • 不勾选Enable
    Auto Alias。

Texture Settings / Output:

  • 保留Data格式为cocos2d。
  • 在Data File中,点击…,将输出保存到项目的Assets下(我保存在Assets/SpriteAtlases),保存为“level”。
  • TexturePacker 自动给文件加了后缀.plist,但是Unity需要.xml文件,因此我们将.plist改为.xml。
  • Texture File路径应该也被设置成和Data File一样的了。
如果你按照我上面的步骤去做,TexturePacker的设置就如下图所示:
Unity3D+免费工具开发2D游戏之二:制作关卡1的界面


如果你点击Publish,然后切换到unity你就会在项目视图里看到SpriteAtlases 文件夹,在此文件夹下看到精灵贴图和精灵数据文件。

我们需要在Unity里做些修改让它看起来正确。
  • 在项目视图里选择level.png,在Inspector 中将Filter Mode改为Point。
  • 点击 Override for Web,将Format 设置成Truecolor ,然后点击Apply。

制作关卡1


是时候用Orthello制作关卡了。

精灵容器:
  • 在unity的项目视图,点开orthello:Orthello
    –> Objects –> Sprites –> SpriteAtlas,然后将 SpriteAtlas-Cocos2D拖到Hierarchy中。
  • 在Hierarchy窗口,点开OT->Containers,你会发现出现了一个新的Container,名字类似Container
    (id=-6840)
    “,这个Container将会包容我们关卡需要的所有的精灵,所有我们可以命名它为“level”。
  • 将“level.png”拖放到“OTSprite
    Atlas Cocos 2D” 脚本的Texture位置。
  • 将“level.xml”拖放到“OTSprite
    Atlas Cocos 2D” 脚本的
    Atlas Data File 位置。

制作砖动画


砖瓦在被销毁和重建时都有动画,所有我们先做动画。

  • Animation 对象拖到Hierarchy中 Orthello
    –> Objects –> Sprites
     ,这将会在OT –> Animations下添加一个新的对象,名字类似 “Animation
    (id=-4320)
    “,将其重新命名为“level anims”。
  • 点选刚创立的动画对象,将设置修改为下图所示的。
  • Framesets下,将Size设置为3.
  • 为了填充Container区域,将 OT –> Containers 下的level拖放进去。
Unity3D+免费工具开发2D游戏之二:制作关卡1的界面
  • 然后将Orthello –> Objects –> Sprites 下的AnimatingSprite 拖放到Hierarchy中,这会给场景添加一个新的对象,名字类似“Animating
    Sprite (id=-23050)
    “。将名字改为“brick“。
  • 将“level anims”拖放到“brick”的Animation位置。 Sprite Container位置会被自动填上“level”容器对象。如果没有,你可以自己将“level”容器对象拖放到此位置。

此时你应该看到brick精灵在场景中,如果你播放,你会看到brick的动画在一直播放。但我们不希望动画在一开始就播放,所以将 Play On Start的勾选去掉。


注意:如果你在场景中看不到brick,请将brick的scale属性改为(1,1,1)。

给砖添加碰撞


我们需要给砖添加碰撞属性,因为我们需要让主角知道他们何时站在地面上。

  • 选中brick,勾选Collidable ,这给brick自动添加一个Box
    Collider 和Rigidbody组件。
  • 我们需要给对象添加一个特定的标签Tag,然后将其加入到层Layer中。 打开Edit
    –> Project Settings –> Tags,打开Tag Manager。
  • 然后点开最上面的Tags,然后在Element0 区域输入“Ground”,然后回车。以后我们还需要更多的Tag,所以我们在这都一并加上,再加个“Ladder”和“Rope”。
  • 我们也需要一些层Layers,所以我们在User
    Layer 8位置输入“Ground”,在User Layer 9位置输入“Ladder”。
  • 点击brick对象,然后在Tag的下拉菜单下选择“Ground”。然后在Layer下拉菜单中也选择“Ground”。

将它变为Prefab


后面我们会给brick添加一些其他的属性,所以我们将brick对象变为prefab,这样我们给它做的改变都会被应用到其他所有prefab的brick对象中。制作一个prefab的brick非常的简单,后面会给你省很多时间的。

  • 在你的项目视图中创建一个新的文件夹 “Prefabs“。
  • 将“brick”拖放到“Prefabs”文件夹中。

制作静态的关卡精灵


接下来我们需要添加混凝土、梯子和绳索,我们将使用和上面一样的容器来显示他们,但是我们不用AnimatedSprite,而是用Sprite对象。

混凝土贴图


  • 如果你的brick对象还在场景的正中间,请移走他。
  • Orthello
    –> Objects –> Sprites
     下的Sprite 拖放到Hierarchy中,这会给场景添加一个新的对象,名字类似“Sprite
    (id=-3700)
    “。将名字改为“concrete“。
  • 将OT –> Containers 下的level容器拖放到concrete的 Sprite
    Container位置处。
  • 此时精灵就在场景中了,但是看起来跟之前的brick一样,这是因为brick在level图片的第一个位置。而混凝土图片在第14位,所以将 “Frame
    Index
    ”设置为14. 这时看起来像一个固体混凝土了。
  • 勾选Collidable ,给它添加一个碰撞检测器。
  • 在Tag的下拉菜单下选择“Ground”。然后在Layer下拉菜单中也选择“Ground”。
  • 将concrete拖到项目视图的“Prefabs”文件夹下创建prefab对象。

梯子和绳索贴图


添加梯子和绳索贴图的步骤类似于混凝土。

  • 如果你的concrete对象还在场景的正中间,请移走他。
  • Orthello –> Objects –> Sprites 下的Sprite 拖放到Hierarchy中,这会给场景添加一个新的对象,名字类似“Sprite
    (id=-3700)
    “。将名字改为“ladder“。
  • 将OT –> Containers 下的level容器拖放到concrete的 Sprite Container位置处。
  • 将 “Frame Index”设置为15.
  • 复制一个ladder,然后将其命名为rope
  • 将rope的 Frame Index改为17.
  • 将ladder和rope拖到项目视图的“Prefabs”文件夹下创建prefab对象。

制作底部的边界


现在我们已经准备好所有的制作关卡用的精灵了。但是我们先制作地步的边界区域。这底部的边界区域可以给主角和敌人等物体站立的地方(如果砖墙被挖了的话)。

  • 创建一个cube:Object
    –> Create Other –> Cube,命名为“border bottom“。
  • 将Transform的position改为 X:
    0, Y: -10.3, Z: 0。
  • 将Transform的scale改为 X:
    26, Y: 1, Z: 1。
  • border
    bottom
    拖到项目视图的“Prefabs”文件夹下创建prefab对象。


此时我们应该可以在游戏视图里看到只露出上面一小半截的cube,而且它的两头都没有到达游戏视图的边界。这个cube实在是太丑陋了,让我们改变一下它的材质让它看起来和brick搭配一点。

  • 在项目视图中新建一个文件夹“Materials”。
  • 右击Materials文件夹创建一个新的材质 Create
    –> Material,命名为“border”。
  • 选中border材质,点击“Main Color”旁边的白色区域,弹出颜色选择界面。
  • 将RGBA设置改为R: 159, G: 2, B: 0, A: 255,然后关闭这个界面。
  • 将border材质拖放到border bottom对象上,此时border bottom对象应该具有和brick一样的颜色了。
  • 选中border bottom,然后点击Prefab旁边的Apply,这样就更新设置到刚刚创立的Prefab对象上了。

修改背景颜色


我们几乎准备好去制作一个关卡了,但是我们首先将背景设置成黑色。

  • 选中Main
    Camera
     ,然后点击Background旁边的颜色选择吸管。
  • 将RGBA设置成0,0,0,255,此时游戏视图中的背景应该是黑色了。

制作一个关卡


哇!我们做了好多步骤,不够现在你已经拥有了制作一批关卡的所有东西了。是几乎所有的东西,你还需要主角、敌人、可以捡起的小物体和一些其他的东西,这些我们在后续的讲解中介绍。


此时,你可以通过不断的复制brick、concrete、ladder和rope来制作一个关卡。但是在做这些之前,我有一些小技巧分享:


  • 在场景视图里,在Scene栏下面的下拉菜单里,选择Tex-Wire。
  • 你可以使用Vertex
    Snap
    很简单的排列物体—在场景视图里,按住V键,然后移动鼠标到物体的四个角落周围看看,你会看到在最近的一个顶点上出现一个方框来锁定这个顶点,然后按住鼠标左键来拖到物体到你希望的位置,你会发现它会紧紧的而且恰当的贴在周围的物体边上。
  • 还记得之前做的border bottom物体,你可以以此为基准线来搭建关卡。不用担心Z轴,Orthello不允许你在z轴移动的。
  • 你可以一下子选中好几个对象(shift+左击来选择,或拖动一片区域来选择),然后复制,在用V键对齐。


下图是我完成后的关卡:

Unity3D+免费工具开发2D游戏之二:制作关卡1的界面



结尾


我希望你喜欢这篇文章,然后能学到一些关于用unity制作2d游戏的知识。在下一篇里我们将会加入可移动的主角,可以让他在整个关卡里移动。

如果你喜欢,请回复这篇博客,并关注我的 Twitter Facebook。你的支持会帮助这个教程的持续进行。这个博客是iDevBlogADay的一部分,这里面收集了一系列程序员开发的经验。






分类: unity3d 标签:

Unity3D+免费工具开发2D游戏之一:工具和插件介绍

2012年7月21日 没有评论

原文地址:http://www.rocket5studios.com/tutorials/make-a-2d-game-in-unity3d-using-only-free-tools-part-1/


原版翻译,转载请注明出处:http://blog.csdn.net/ariel7321/article/details/7765479


该系列讲座一共有五节:

第一节 工具和插件介绍

第二节 制作关卡1的界面

第三节 创建人物动画

第四节 创建计分界面

第五节 制作AI敌人

通过这些讲解,我们将重建一个非常经典的游戏Lode Runner。在本节中,我将介绍一些我们需要用到的免费工具和插件,以及如何在Unity中搭建好这些环境,下一节我们才制作游戏。其中的有些免费插件也有付费版本,付费的有更高级的功能。


工具介绍


Unity3D

Unity3D不但能做出非常出色的3D游戏,如果配合一些额外的插件和脚本的话同样可以做出令人满意的2D游戏的。本讲座中,我们将使用免费版本的Unity3D,可以将游戏发布到PC和网页上。但是如果用付费版本的Unity3D将本游戏移植到iPhone或Android手机上,那也是很容易的。

Orthello 2D framework

现在有不少专门给Unity3D做的精灵插件,其中最流行的就是Sprite Manager 2,我以前用过。但最近想找个替代的插件,我想试试Orthello。一些人说它不太好用,但是作为一个免费插件,它的功能是很棒的。

iTween

这是一个专门制作各种动画的插件,实际上是我开始一个新项目第一个会装的插件。

A*Pathfinding Project

A* Pathfinding可能是用的最广的在Unity3D上的寻路系统插件了,它有免费版本,非常好用。

TexturePacker

这是一个独立的应用软件,它可以很容易的帮你管理精灵图。


开始新的项目


1. 安装最新版本的Unity3D,然后创建一个新的项目:File—>New Project,然后点击Browse…按钮选一个项目存储路径,输入项目名称后保存,然后直接点击create按钮创建项目,这里不需要选择任何资源包。

2. 在项目视图里创建一个文件夹,命名为“Scenes”。然后将当前的场景保存在这个文件夹下, File
-> Save Scene As,
命名为“Level1”。


安装Orthello 2D


1. 打开Asset Store, Window
-> Asset Store
,搜索“orthello 2d”,然后就点击下载就好了。或者去orthello官网,下载最新版本,解压后然后双击orthello.unitypackage。

2.
当Import Package窗口出现时,确保所有选项都选了,然后点击Import。过几秒种就可以在项目视图里看到“Orthello”了。


初始化Orthello
2D


Orthello官网有很多相关信息,你需要去看看。下面我就简化了步骤,帮你开始用起来。

记住:在每个scene中,你都需要重复以下步骤,才能使Orthello在每个Scene中工作。

1. 在unity的项目视图里,进入 Orthello
-> Objects
,然后将OT prefab拖到Scene中或是Hierarchy中。

OT
prefab充当一个父亲角色,我们之后要加入到scene中的动画和精灵容器都来自它。将OT prefab加入到scene中后,就会自动对摄像机做一些改变,使之可以恰当的为2D游戏服务。主要的变化就是将摄像机变为了正交投影相机,大小改为了332.


安装iTween


1. 打开Asset Store, Window
-> Asset Store
,搜索“iTween”,然后就点击下载就好了。

2. 当Import
Package窗口出现时,确保所有选项都选了,然后点击Import。过几秒种就可以在项目视图里看到“iTween”了。


安装A*Pathfinding


当我在写这篇文章时,unity的asset
store还没有免费版本的A*Pathfinding可以下载。

1. 到期官网下载,下载后的文件名为:PathfindingProject_Free.unitypackage

2. 双击此文件,会出现Import
Package窗口,确保所有选项都选了,然后点击Import。过几秒种就可以在项目视图里看到“AstarPathfindingProject”了。


初始化A*Pathfinding


详细的初始化步骤请参见 A*
Pathfinding Documentation
getting
started
,这里我简化了步骤。

1.
创建一个新的空游戏物体GameObject -> Create Empty。

2.
确保position中的x、y、z值都是0,然后命名为“A*”。

3.
给A*添加一个A*路径脚本 Component
-> Pathfinding -> Pathfinder

4.
在Inspector中你会看到 “Do you want to enable Javascript support?”,因为后面的脚本我们都有C#,所以选择“No”。


结尾


如果按照我上面的步骤设置unity,最后就会看到如下图所示的设置:

Unity3D+免费工具开发2D游戏之一:工具和插件介绍





分类: unity3d 标签: