Ich versuche, meine eigene Game Engine zu schreiben. Ich habe die Dateien wie Vermögenswerte der Spiele verpackt, damit die Engine sie schneller und einfacher lesen kann. Ich habe jedoch auf ein Problem gestoßen. Ich konnte die Quelle des Problems nicht finden. Wenn ich versuche, Daten aus der von mir erstellten PAK -Datei zu lesen, gibt es eine Abweichung in den von mir gelesenen Daten. Ich kann die Daten nicht richtig lesen. < /P>
Dateistruktur: < /p>
Ich versuche, meine eigene Game Engine zu schreiben. Ich habe die Dateien wie Vermögenswerte der Spiele verpackt, damit die Engine sie schneller und einfacher lesen kann. Ich habe jedoch auf ein [url=viewtopic.php?t=20324]Problem[/url] gestoßen. Ich konnte die Quelle des Problems nicht finden. Wenn ich versuche, Daten aus der von mir erstellten PAK -Datei zu lesen, gibt es eine Abweichung in den von mir gelesenen Daten. Ich kann die Daten nicht richtig lesen. < /P> Dateistruktur: < /p> [code][Header] [Index Table] [Asset Data] < /code> Codes: < /p> namespace EngineCore { public class PakEntry { public string Name { get; set; } public byte Type { get; set; } public uint Offset { get; set; } public uint Size { get; set; } } } < /code> namespace EngineCore { public interface IPakReaderBackend { byte[] Read(PakEntry entry); void Dispose(); } } < /code> using System; using System.IO; using System.IO.MemoryMappedFiles;
namespace EngineCore { public class MemoryMappedBackend : IPakReaderBackend, IDisposable { private readonly MemoryMappedFile mmf; private MemoryMappedViewAccessor accessor;
public MemoryMappedBackend(string path) { mmf = MemoryMappedFile.CreateFromFile(path, FileMode.Open); }
public byte[] Read(PakEntry entry) { using var accessor = mmf.CreateViewAccessor(entry.Offset, entry.Size, MemoryMappedFileAccess.Read); byte[] buffer = new byte[entry.Size]; accessor.ReadArray(0, buffer, 0, buffer.Length); return buffer; }
public void Dispose() { accessor?.Dispose(); mmf?.Dispose(); GC.SuppressFinalize(this); } } } < /code> using System.IO;
namespace EngineCore { public class SeekAndReadBackend : IPakReaderBackend { private readonly string pakFilePath;
public SeekAndReadBackend(string path) { pakFilePath = path; }
public byte[] Read(PakEntry entry) { byte[] buffer = new byte[entry.Size]; using (FileStream fs = new FileStream(pakFilePath, FileMode.Open, FileAccess.Read)) { fs.Seek(entry.Offset, SeekOrigin.Current); fs.Read(buffer, 0, buffer.Length); } return buffer; }
public void Dispose() { } } } < /code> using System; using System.Collections.Generic; using System.IO; using System.Text;
namespace EngineCore { public class PakWriter : IDisposable { private const string Magic = "TGPAK"; private const ushort Version = 1; private readonly List entries; private readonly MemoryStream dataStream;
public PakWriter() { entries = new List(); dataStream = new MemoryStream(); }
entries.Add(new PakEntry { Name = Path.GetFileName(filePath), Type = type, Offset = offset, Size = (uint)fileData.Length }); }
public void Save(string outputPath) { using (FileStream fs = new FileStream(outputPath, FileMode.Create, FileAccess.Write)) { using (BinaryWriter bw = new BinaryWriter(fs)) { bw.Write(Encoding.ASCII.GetBytes(Magic.PadRight(6, '\0'))); bw.Write(Version); bw.Write((uint)entries.Count); long indexOffsetPos = fs.Position; bw.Write((uint)0);
public void Dispose() { entries.Clear(); dataStream?.Dispose(); GC.SuppressFinalize(this); } } } < /code> using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text;
namespace EngineCore { public class PakReader : IDisposable { public List Entries { get; private set; } = new List(); private readonly IPakReaderBackend backend;
public PakReader(string filePath, bool useMemoryMapping = false) { using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { using (BinaryReader br = new BinaryReader(fs)) { string magic = Encoding.ASCII.GetString(br.ReadBytes(6)).TrimEnd('\0'); if (magic != "TGPAK") throw new Exception("Invalid pak");
Das Problem, das ich habe, ist, dass der Frühling versucht, die falsche Daten zu laden. SQL -Datei. Ich möchte einen bestimmten Test verwenden. main
-resources
-application.properties
-data.sql
test...
Bearbeiten und Lösung:
stellte sich heraus, dass ich an den falschen Deskriptor-Set verbindlich war. Es sollte immer der Desc-Set 0 gewesen sein, aber da ich einen globalen...
Ich begegne einen Fehler in meiner React-Anwendung, während ich versuche, gestyledige Komponenten zu verwenden. Die Fehlermeldung, die ich empfange />
...
Ich verwende den Usecontext in meinem Code...