Articles of 二进制

我如何从二进制文件读取图像?

我试图把所有的资产放在一个二进制文件中,然后试图从文件本身读取它们,而不是将它们分散在不同的文件夹中,以便让它们暴露。 我想要实现的就像RPG Maker和Wolf Editor用来将所有游戏的图像/声音join一个自定义格式文件(例如Data.wolf)的方式。 这是一个非常简单的安全方法,但足以满足我的计划。 现在,我有下面的代码来读取二进制文件中的PNG文件,当它试图从IMG_LoadPNG_RW创建一个新的表面时,总是输出一个错误消息,说“读取PNG文件时出错”。 tString sResult{}; cFile_Manager::tRead_File oRead(sDir, std::ios::binary); if(oRead.is_open()) { tString sLine{}; while(getline(oRead, sLine)) sResult += sLine + "\n"; oRead.close(); }else { throw cLog("\n\n[ERROR] Wrong dir passed.\n\nDIR: %s\n\n", sDir); } SDL_RWops* aRW{}; aRW = SDL_RWFromConstMem(&sResult, sizeof(sResult)); if(!aRW) // Error message SDL_Surface* aSurface{}; aSurface = IMG_LoadPNG_RW(aRW); if(!aSurface) // This is where SDL shows […]

无法将播放器数据保存在Update()方法中的二进制文件中

我试图在Application.persistenceDataPath的二进制文件中保存玩家的生命。 我写了一个方法来存储玩家的生活: public void SaveLife() { BinaryFormatter bf = new BinaryFormatter (); FileStream file = File.Open (Application.persistentDataPath + "/playerInfo.dat", FileMode.Open); PlayerData data = new PlayerData (); data.savedLife = life; bf.Serialize (file, data); file.Close (); } 问题是,当SaveLife()被称为OnApplicationQuit它的作品。 相反,如果我在一个类的Update()方法中调用它,它不起作用。 当某个事件被触发时,Update()方法被调用: void Update() { if (life < 20) { if (//certain event is triggered) { SaveLife(); } lifeTimer […]

(XNA)可能隐藏,压缩或重命名.XNB文件?

我对XNA还比较陌生(在这一点上,只有一个星期到C#和XNA),但是我现在开发游戏已经有一段时间了,我使用的程序在创建可执行文件时并不需要任何外部文件。 我对外部文件(大部分)完全没问题,但是阅读时,好像.XNB文件很容易被其他人使用,从而使你的资源无法使用。 经过一番思考,我想知道是否可以做以下三件事情之一:1.将.XNB文件隐藏在.exe中,在这种情况下,它可能只在运行时在外部位置创建它们(wouldn'真的解决了主要问题,但仍然)? 2.将许多.XNB二进制文件压缩成一个单一的二进制文件(比如声音为1,精灵为1等)3.(这个是我自己OCD的一个)把扩展名从.XNB改成我的select? 例如,为了使.DAT减less直接指标,我使用了XNA和/或这些文件可以用.XNB松土器访问? 这些都不会特别解决我最初的问题,但我仍然怀疑它们是否可能。 无论如何,先谢谢你们!

为3D网格创建自定义二进制格式

我曾经看到有人说,根据您的需要,使用自定义的二进制格式,而不是使用交换格式,会更好,更快。 但是,我想知道如何创建一个只包含顶点和索引数据的基本格式,如何将这些数据写入二进制文件并读取它。 多谢。

如何用具体操作的二进制字符/项目进行操作?

我有下一个问题。 一个项目可以有很多状态: NORMAL = 0000000 DRY = 0000001 HOT = 0000010 BURNING = 0000100 WET = 0001000 COLD = 0010000 FROZEN = 0100000 POISONED= 1000000 一个项目可以同时有一些状态,但不是全部 不可能同时干燥和潮湿。 如果你冷藏一个湿的物品,它变成冷冻。 如果你把一个湿的物品,它变成正常 一个项目可以燃烧和毒药 等等。 我已经尝试将二进制标志设置为状态,并使用AND来组合不同的状态,检查之前是否可以执行,或者更改为其他状态。 是否存在一个具体的方法来有效地解决这个问题,而没有一个无休止的开关来检查每一个状态与每个新的状态? 检查两种不同的状态是相对容易的,但是如果存在第三种状态,则不是微不足道的。

保存资产时如何处理版本更改?

我一直在做一个RPG的一段时间,我使用两种不同的序列化技术。 敌人,武器,物品和XML一样保存。 地图和事件被保存为“受控二进制”(每个类获得一个保存/加载方法,他们决定他们想要保存/加载)。 但是我开始质疑我对地图和事件的select。 我的担忧: 我创建了一个地图编辑器,但是我仍然错过了能够通过打开文件来改变小的东西。 变化如此之大。 假设我想给一个类添加一个variables,如果我不加载/保存每个地图,它会在稍后中断。 第一个担心是不改变我的技术难以避免。 我想转换到JSON,但这是很多工作。 我也认为它随处可见[DataContract]和[DataMember]属性,显得很丑陋。 这让我担心我的第二个问题,我想知道我该如何处理它? 你是否创建了一个循环遍历所有地图的小程序,并用新variables重新保存它们? 因为我现在开始获取几张地图,而且我仍然手动完成。 每当我想要做一些改变时,它会让我思考三次,因为它创造了许多额外的工作。

通过套接字对多人游戏进行身份validation

我正在为我正在开发的新的多人游戏实现一个自定义的二进制协议。 它是一个基于回合的战略游戏,所以计时并不重要。 我目前已经完成了系统的基本数据同步部分,我想知道如何通常为MMORPG游戏或类似的用户login/注销和encryption。 你可以推荐一个安全/秘密密码传输的scheme在login? (Diffie-Hellman密钥交换?) 我如何实现数据包的强encryption? (AES 128位?或者这个post中提到的“encryption比你更可能破解的任何scheme”) 是否有数据报格式的scheme,有助于加强游戏服务器重播攻击,无效数据包等?

如何在不使用密钥的情况下encryption保存文件?

说我做了一个简单的程序,它采用二进制格式encryption的.dat文件,然后将其解密为一个字节数组 ,然后再次将所有内容重写到解密的文件中。 例如: 我做了一个二进制encryptionalgorithm。 => 0100100001100101001000000110100001100101011000 … 但是这是非常容易解密的… 有什么办法,如果有可能不需要任何种类的密钥,encryption我的保存进度?