Sharpex2D 1.3.0 | 2D Game Framework

    • Beta
    • Open Source

    Es gibt 388 Antworten in diesem Thema. Der letzte Beitrag () ist von 3Angle.

      Trade schrieb:

      Da geht das dann über ".xcf"-Dateien und den PostCompiler.

      Du meinst das Content Loading?
      Also ist das Bild iwie darein compiled? Und wie funktioniert das? Gibts da ein Tool für?

      Edit: Habs raus, mit dem ContentPipeline.exe tool. xD
      Wusste doch da war iwas was ich nich kenne. Hab jetz die xcf erstellt und laden funzt prima.

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Yothrii“ ()

      In den Eigenschaften deines Projekt kann man unter "Buildereignisse" andere Programme ausführen lassen. Zum einen gibts es den Präbuild (Wird vor dem erstellen deiner Projektmappe ausgeführt) und den Postbuild (nach dem erstellen deiner Projektmappe). Im Postbuild wird dann die ContentPipeline.exe ausgeführt welche den Content in ein Format kompiliert mit dem sich gut arbeiten lässt.

      Die ContentPipeline.exe nimmt zwei Argument entgegen:

      1) Der Pfad indem dein Roh Content liegt (z.B jpeg Bilder, Sounds, etc)
      2) Der Ausgabe Pfad, also dort wo es hin soll (das ist wenn du nichts am ContentRoot verändert hast in Debug|Release\Content)

      Im Postbuild schreibst du folgendes rein:

      call C:\....ContentPipeline.exe "in Gänsefüßchen Pfad zum Roh Content" "in Gänsefüßchen Ziel Ordner"

      Der Content wird nun automtisch erstellt wenn du dein Projekt erstellst. Am besten du legst dir in deinen Projekt einen Ordner "Content" an in den du deine Rohdateien rein ziehst (Das geht auch mit Drag and Drop) den Pfad gibst du dann an.

      Edit: Achja, eine Dateiendung musst du nicht angeben, es reicht der Name.
      Vermutlich wurde dein Jpeg in Png konvertiert, dadurch ist es größer - aber sollte nicht weiter stören.

      Edit: Das nächste Problem wirst du wahrscheinlich beim Zeichnen von Text bekommen. Eventuell kann @Trade die VSIX Datei oder den Aufbau der .font Datei hier posten.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ThuCommix“ ()

      Habe jetzt im PostBuild das stehen:

      Quellcode

      1. call $(OutDir)ContentPipeline.exe "$(OutDir)Content_Raw" "$(OutDir)Content"

      Die ContentPipeline.exe liegt im bin/Debug, bekomme immer den Fehler das der Befehl mit Code 1 beendet wurde.
      Und das Build schlägt fehl. Dabei hab ich mir gedacht ich erstell nen Content_Raw und Content in bin/Debug und mach in Raw den Content rein und das wird dann in Content kopiert aber ne? xD
      Die Ausgabe sollte Dir da sagen, was los ist. Wenn ich mich nicht recht irre, sollte beim ersten Pfad auch noch ​"" drum.

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
      Ne, um den ersten Pfad müssen keine Gänsefüßchen rum. bei OutDir bist du im bin Ordner, du musst allerdings in Debug, ob dein Raw Content auch im bin Ordner ist weiß ich nicht. Probier es einfach mit absoluten Pfaden wenn du unsicher bist.

      Edit: Unter Ansicht -> Ausgabe siehst du auch welchen Fehler die ContentPipeline.exe ausgegeben hat. Dürfte hilfreicher sein als Code -1.
      Kein Problem, wenn man das noch nie gemacht hat, ist das alles gar nicht so einfach. Eventuell solltest du für deine Fragen einen neuen Thread aufmachen, da es hier offensichtlich nicht mehr um Vortex2D geht, und wir den Thread mit anderen Dingen voll posten :D
      Ist es möglich die aktive Szene zu "deaktivieren" so das diese nicht mehr gezeichnet wird und ohne das ich eine andere Szene zuweisen muss? Per SceneManager.ActiveScene = null; geht da ja leider nicht.
      github.com/ThuCommix/Sharpex2D…Scene/SceneManager.cs#L60
      KaskadekingDE on GitHub :)
      Bitte keine Fragen über Programmierung per PN! Dafür ist das Forum hier.

      Who cares? ¯\_(ツ)_/¯
      Ich habe die 29 Beiträge bezüglich Sharpex2D mal von dort hierher verschoben, damit sich andere auch hier Hilfe holen können und das eher hier reinpasst. ;)

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
      Hey Leute, ich versuche mich seit langem mal wieder n bissl an der Spiele-Programmierung.

      Hatte versucht ein WASD-Movement einzubauen, aber das hakelt son bissl, statt flüssig zu laufen.
      Ist dann wie in nem Schreibprogramm = "d d d ddddd dddddddddddd":
      In der Player Klasse
      Spoiler anzeigen

      C#-Quellcode

      1. public enum Direction
      2. {
      3. None = 0,
      4. Up = 1,
      5. Right = 2,
      6. Left = 4,
      7. Down = 8
      8. };
      9. public Direction vertWalkingDirection { get; set; }
      10. public Direction horiWalkingDirection { get; set; }
      11. /// <summary>
      12. /// Updates the object.
      13. /// </summary>
      14. /// <param name="gameTime">The GameTime.</param>
      15. public void Update(GameTime gameTime)
      16. {
      17. int x = 0, y = 0;
      18. switch (vertWalkingDirection)
      19. {
      20. case Direction.Up:
      21. y = -5;
      22. break;
      23. case Direction.Down:
      24. y = 5;
      25. break;
      26. }
      27. switch (horiWalkingDirection)
      28. {
      29. case Direction.Left:
      30. x = -5;
      31. break;
      32. case Direction.Right:
      33. x = 5;
      34. break;
      35. }
      36. Position += new Vector2(Velocity.X + x, Velocity.Y + y);
      37. _spriteSheet.Update(gameTime);
      38. }

      Und in der MainGame.UpdateInput-Methode:
      Spoiler anzeigen

      C#-Quellcode

      1. _newKeyboardState = Input.Keyboard.GetState();
      2. if (_newKeyboardState.IsKeyDown(Sharpex2D.Input.Keys.A))
      3. {
      4. _player.horiWalkingDirection = Player.Direction.Left;
      5. }
      6. else if (_newKeyboardState.IsKeyDown(Sharpex2D.Input.Keys.D))
      7. {
      8. _player.horiWalkingDirection = Player.Direction.Right;
      9. }
      10. if (_newKeyboardState.IsKeyDown(Sharpex2D.Input.Keys.W))
      11. {
      12. _player.vertWalkingDirection = Player.Direction.Up;
      13. }
      14. else if (_newKeyboardState.IsKeyDown(Sharpex2D.Input.Keys.S))
      15. {
      16. _player.vertWalkingDirection = Player.Direction.Down;
      17. }

      Polling is trolling!

      Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
      Warum nutzt Du dafür eine Enum? Da bietet sich ein Vector2 genauso an (Richtungsvektor).
      Außerdem ist die Pixelverschiebung natürlich nicht so sonderlich real und könnte in der Tat etwas stocken. Es wäre besser, hier wirklich Physik einzubauen:

      =>

      Die Geschwindigkeit regelst Du über einen Vektor und die Zeit ist einfach Deine verstrichene GameTime. Das kannst Du im Update dann ja machen.
      Somit lässt sich zum Beispiel dann auch Gravitation am Ende sehr leicht einbauen.

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
      Meine erste Überlegung wäre da erstmal:
      Wie portiere ich denn die Enum sinnvoll in den Vector2? Gut er kann 2 Informationen speichern, oder nicht? A und B sag ich mal.
      A wäre dann die vertikale Richtung und B die Horizontale?

      Ich möchte damit ja auch diagonale Bewegungen ermöglichen, deshalb.
      Polling is trolling!

      Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
      Joa, einfach die Koordinaten benutzen. Dafür hat die Klasse ja X für horizontal und Y für vertikal. ;)
      Und diagonal ist ja kein Problem mit Vektoren. Weißt Du, was Vektoren genau sind und was sie darstellen?

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: