现在做2d游戏一般用什么区合成plist图片分解工具?

cocos studio做2d游戏特效的一个流程是什么?
用其他工具做,再导入cocos自己的编辑器,还是怎样?cocos2d-x做游戏的 2d特效一般不用粒子特效吧,最后做好的特效就是序列帧或gif图吗?
谢邀,自己只做3d的也不是很清楚~所以询问了下家里万能的守护兽-x-传说就和AE一个概念,是使用素材再用自身的一些设置弄效果最后输出图片的
已有帐号?
无法登录?
社交帐号登录一.plist导出unity sprite图集
  texturepack有开源的工具可以导出json文件,然后倒入sprite。但是很多游戏使用的是plist打包,比如cocos2d。我们做demo可能需要这些资源来用用。所以有此需求。
  首先是解析plist。自己xml解析是在麻烦,网上找到个,使用c#的XDocument类,解析成自己的plist类型。代码基本没变,因为plist的&!DOCTYPE&那行总是解析出错,所以在外面载入好字符串,然后去掉这一行。
public void LoadText(string text)
XDocument doc = XDocument.Parse(text);
XElement plist = doc.Element("plist");
XElement dict = plist.Element("dict");
var dictElements = dict.Elements();
Parse(this, dictElements);
  然后读取数据载入到自己的TPAtlas类里面(本来想通过这个类,直接缓存读取),然后是写入到textureImporter.spritesheet里,再AssetDatabase.ImportAsset就OK。这里有个问题,就设置sheet后,要重写textureType和spriteImportMode后面ImportAsset才有效,不然内存是改了,但是不会保存到meta文件,下次打开就没了,可能是unity的bug
[MenuItem("Assets/Texture/PLisToSprites(SelectPList)")]
static void ConvertSprite()
//EditorUtility.DisplayDialog("MyTool", "Do It in C# !", "OK", "");
Object selobj = Selection.activeO
string selectionPath = AssetDatabase.GetAssetPath(Selection.activeObject);
if (!selectionPath.EndsWith(".plist"))
EditorUtility.DisplayDialog("Error", "Please select a plist file!", "OK", "");
Debug.LogWarning("#PLisToSprites start:" + selectionPath);
string fileContent = string.E
using (FileStream file = new FileStream(selectionPath, FileMode.Open))
byte[] str = new byte[(int)file.Length];
file.Read(str, 0, str.Length);
fileContent = GetUTF8String(str);
Debug.Log(fileContent);
file.Close();
file.Dispose();
//去掉&!DOCTYPE&,不然异常
int delStart = fileContent.IndexOf("&!DOCTYPE");
int delEnd = fileContent.IndexOf("\n", delStart);
fileContent = fileContent.Remove(delStart, delEnd - delStart);
Debug.Log(fileContent);
//解析文件
PList plist = new PList();
plist.LoadText(fileContent);//Load(selectionPath);
TPAtlas at = new TPAtlas();
at.LoadX(plist);
//重写meta
string texPath = Path.GetDirectoryName(selectionPath) + "/" + at.realTextureFileN
Texture2D selTex = AssetDatabase.LoadAssetAtPath(texPath, typeof(Texture2D)) as Texture2D;
Debug.Log("texture:" + texPath);
Debug.Log("write texture:" + selTex.name+ "
size:"+selTex.texelSize);
TextureImporter textureImporter = AssetImporter.GetAtPath(texPath) as TextureI
if (textureImporter.textureType != TextureImporterType.Sprite && textureImporter.textureType != TextureImporterType.Advanced)
EditorUtility.DisplayDialog("Error", "Texture'type must be sprite or Advanced!", "OK", "");
if (textureImporter.spriteImportMode!=SpriteImportMode.Multiple)
EditorUtility.DisplayDialog("Error", "spriteImportMode must be Multiple!", "OK", "");
SpriteMetaData[] sheetMetas = new SpriteMetaData[at.sheets.Count];
for (int i = 0; i & at.sheets.C i++)
var frameData = at.sheets[i];
sheetMetas[i].alignment = 0;
sheetMetas[i].border = new Vector4(0, 0, 0, 0);
sheetMetas[i].name = frameData.
sheetMetas[i].pivot = new Vector2(0.5f, 0.5f);
sheetMetas[i].rect = new Rect(frameData.frame.x, at.size.y - frameData.frame.y -frameData.frame.height,
frameData.frame.width,frameData.frame.height);//这里原点在左下角,y相反
//Debug.Log("do sprite:" + frameData.name);
//textureImporter.spriteImportMode = SpriteImportMode.M
textureImporter.spritesheet = sheetM
textureImporter.textureType = TextureImporterType.S
textureImporter.spriteImportMode = SpriteImportMode.M
//不加这两句会导致无法保存meta
AssetDatabase.ImportAsset(texPath, ImportAssetOptions.ForceUpdate);
Debug.LogWarning("#PLisToSprites end:" + texPath);
二.unity sprite图集拆分小图
  有些图是ui用unity的sprite做ui目前不太靠谱,所以我们还是使用ngui等插件自己打图,所以要拆分。
  还是使用万能的TextureImporter类,拿到sheet然后,每个sheet写入到新图片。
[MenuItem("Assets/Texture/Output Sprites(SelectTexture)")]
static void OutputSprite()
string selectionPath = AssetDatabase.GetAssetPath(Selection.activeObject);
Texture2D selTex = Selection.activeObject as Texture2D;
string rootPath = Path.GetDirectoryName(selectionPath) +"/"+ Selection.activeObject.
TextureImporter textureImporter = AssetImporter.GetAtPath(selectionPath) as TextureI
//textureImporter.textureType = TextureImporterType.A
//textureImporter.isReadable =
Object[] selected = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
if (!Directory.Exists(rootPath))
Directory.CreateDirectory(rootPath);
Debug.Log("output dir :" + rootPath);
//foreach (var item in selected)
Sprite sprite = item as S
if (sprite == null)
string path = rootPath + "/" + sprite.name + ".png";
Debug.Log("output :" + path);
SaveSpriteToPNG(sprite, path);
foreach (var spmeta in textureImporter.spritesheet)
string path = rootPath + "/" + spmeta.name + ".png";
string subDir = Path.GetDirectoryName(path);
if (!Directory.Exists(subDir))
Directory.CreateDirectory(subDir);
Debug.Log("output :" + path);
SavePriteToPNG_Meta(selTex, spmeta, path);
AssetDatabase.Refresh();
static bool SaveSpriteToPNG(Sprite sprite, string outPath)
// 创建单独的纹理
Texture2D tex = new Texture2D((int)sprite.rect.width, (int)sprite.rect.height, sprite.texture.format, false);
tex.SetPixels(sprite.texture.GetPixels((int)sprite.rect.xMin, (int)sprite.rect.yMin,
(int)sprite.rect.width, (int)sprite.rect.height));
tex.Apply();
// 写入成PNG文件
File.WriteAllBytes(outPath, tex.EncodeToPNG());
static bool SavePriteToPNG_Meta(Texture2D sourceImg,SpriteMetaData metaData, string outPath)
Texture2D myimage = new Texture2D((int)metaData.rect.width, (int)metaData.rect.height, sourceImg.format,false);
Color[] pixs = sourceImg.GetPixels((int)metaData.rect.x, (int)metaData.rect.y,(int)metaData.rect.width, (int)metaData.rect.height);
myimage.SetPixels(pixs);
myimage.Apply();
//AssetDatabase.CreateAsset(myimage, rootPath + "/" + image.name + "/" + metaData.name + ".PNG");
File.WriteAllBytes(outPath, myimage.EncodeToPNG());
代码工程:
使用注意事项:
plist转sprite要选中plist文件右击操作。元图要改成sprite的multi格式。里面数据名字可能有区别,主要看texture的名字和每个子图的rect,我兼容了两种版本,有其他格式自己改代码吧。还有plist要改成utf8格式,utf8+有时候无效。
拆小图要选中png图右击操作。格式要改成rgba32,不压缩的,类型advanced ,勾上read/write enable。还有size不能小于元图大小。
我参与的团队
积分与排名
评论排行榜
阅读排行榜开发2d游戏需要用到哪个(些)库?_百度知道2D游戏中常见的一帧一帧的图片都是美工一张一张手绘出来的么?
图片如下:使用cocos2dx或者其他游戏引擎开发的2D游戏中,常常用到一张一张类似上面的图片。有时一个人物都有几十张,都是美工用Photoshop画出来的么,如果是精细的图片,美工不累死么?他们常用什么软件作图,有没有偷懒的办法?
两种方法:1.序列帧(手绘或三渲二)2.骨骼动画(spine或flash+dragonbones)无论哪种都是工作量不小的,偷懒只会导致低质量,区别只在于骨骼的素材大小比较小。
谢邀这些是。其实像素画的制作难度真不大,稍微学习一下就可以,也不需要太多美术基础(这就是为啥现在ipad上像素游戏泛滥,程序猿不会画啊!)如果是十分精细的图片现在年代来讲都用2d骨架制作器了。比如Unity上的EasyMotion2D。甚至是大公司自家开发引擎,比如UbiArt Framework另:90年代还有一种做法就是做成精细的3D模型然后一帧一帧渲染,很花时间,但是效果很好(以当年水平来看),参见英雄无敌III,星际争霸。======== 从答案下面贴上来的补充分割线 =======一般来讲你如果看到的图是很多帧并在一起并且有灰白格子作背景的话(比如你给我的例子)肯定就是了。逐帧就是一帧一帧的画出来的。这种素材一般是psd文件,灰白格子说白了就是透明背景。其实这种人物动作全部并在一起的大图是有一个专门名称的,叫sprite sheet,至于里面的单个图(帧)我们叫做sprite.这样的设计也是有意图的,为了方便引擎读取。引擎将整个sprite sheet读取然后根据图的尺寸相应提供内存,然后分割开来放到一个数据结构里面就可以很方便的根据id读取并且播放动画。如果你不是搞程序的可以忽略我这句,总之就是方便引擎处理。这种,逐帧的也叫光栅图(raster graphic),和矢量图(vector graphic)不是一个东西,后者多用于网页设计。此外还有更高级的Interpolation方法,用于比如骨架动画。另:你还有一个另外的问题其实就是可不可以偷懒减少美术工作量,答案是当然有,用Psd搞一个多图层,需要变化的部位重新用一个图层画即可。不过这样的话真要偷懒一般都直接转到骨架动画上去了。。。
画几张图就累死了,那3D整个流程不是要死一堆人了?
是的哦确如其他知友所言,游戏2D动画制作有以下几种:1、帧序列,就是一帧帧画;2、骨骼动画,就是画出每个身体部件,然后用Spine等软件拼起来做旋转变形;3、3渲2,就是用3D软件建模,然后再把动作输出成2D。至于美术工作量的问题,确实是有啦,所以美术大大们都很厉害嘛!不过根据现在的项目经验来看,也不是现象中那样,即使是ACT游戏,一套连招所需要的固定帧数也不是非常多,多数是靠节奏调整来获得视觉的连贯和打击感;而且现在也基本会用骨骼动画,也可以有效减少帧序列的数量(其实主要是减少资源,从设计上还是要画出所有帧的草图啦)。
已有帐号?
无法登录?
社交帐号登录查看: 13915|回复: 184
同志们,别再谈参数啦,来亲眼看看由两幅2D图片合成的3D图片吧,很震撼!!!
在线时间175 小时
阅读权限40
帖子猥币巴士票
猥服出巡 Lv.4, 积分 664, 距离下一级还需 336 积分
先将图片看虚,2张图片看成4张。
然后通过轻微对眼的方式,调节成3张。当中间那张由模糊变成清晰时,
便是大功告成的时候。如果能看到,还是很震撼的
看到后稍微移动眼睛可以明显感觉到画面的层次感。
我去 最后手出屏了 震撼
最后那张的手3D效果最好
咱对眼能力太差了
手办莫非是《福星小子》的拉姆。。。 ...
我的眼睛调节功能还不错,一下就看出来了 ...
猥币232067
在线时间954 小时
阅读权限90
帖子猥币巴士票
猥震海内 Lv.9, 积分 53804, 距离下一级还需 6196 积分
看不出来有什么不同
在线时间228 小时
阅读权限50
帖子猥币巴士票
猥言大义 Lv.5, 积分 1971, 距离下一级还需 29 积分
三维立体画,十多年前就看过了
希望永远也不要长大.
在线时间292 小时
阅读权限40
帖子猥币巴士票
猥服出巡 Lv.4, 积分 839, 距离下一级还需 161 积分
落后得不得了的斗鸡眼3D成像.
在线时间328 小时
阅读权限60
帖子猥币巴士票
猥人师表 Lv.6, 积分 4780, 距离下一级还需 220 积分
猥币236028
在线时间2174 小时
阅读权限120
帖子猥币巴士票
斗鸡眼嘛 我还是很在行的……
在线时间48 小时
阅读权限30
帖子猥币巴士票
猥乎其微 Lv.3, 积分 446, 距离下一级还需 54 积分
看不出{:4_560:}{:4_560:}
在线时间58 小时
阅读权限60
帖子猥币巴士票
猥人师表 Lv.6, 积分 2522, 距离下一级还需 2478 积分
没看到。。。
在线时间229 小时
阅读权限50
帖子猥币巴士票
猥言大义 Lv.5, 积分 1728, 距离下一级还需 272 积分
好吧其实我是来求对眼技巧的。不过也无所谓了orz
在线时间906 小时
阅读权限60
帖子猥币巴士票
猥人师表 Lv.6, 积分 2163, 距离下一级还需 2837 积分
看是看出来了,但很不清晰啊
票!票!票!【稀有成就】
真是意外,发点八卦居然这么多人投票,现在的人呐……(发布一个投票帖并且有超过500人参与投票。资源、回复可见贴不可)
成就猎人Rank.D【普通成就】
你已经踏上了成就收集的不归路,5个成就怎么可能满足你的需求,继续努力吧! (获得累计超过5个成就--不包括负面成就)
管理团队【光辉事迹】
猥皮大本营管理团队特有的红色令牌。象征权力与责任的契约之证。(担任过论坛各级版主)
精英手环【普通成就】
维护世界和平,拯救BUS精华区的重任就交给你了,好吗(累计发表1篇精华帖子)
水元素【普通成就】
水、H2O、みず、water,额...总之怎么叫都行了
(累计发帖1000即可解锁)
浮云收藏家【稀有成就】
已经收藏到这么多浮云了吗,不错嘛!(累计获得5000朵浮云)
浮云爱好者【普通成就】
一朵,两朵,三朵,呵呵呵… (累计获得1000朵浮云)
常客【普通成就】
《我的业余生活》从前有一个论坛叫TGBUS…(在线时间超过1000小时)
Powered by}

我要回帖

更多关于 2d游戏图片资源 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信