Beiträge von internetfreak

    @networkclobber
    Was hast du erwartet?
    Dass dein Splashscreen dir die Sachen lädt?
    Das musst du schon in Load-Ereignis der Form machen.
    Auf dem Splashscreen steht lediglich dein Text, laden tut der aber nichts.
    Und ne Progressbar bekommste afaik sowieso nur, indem du nen Pseudosplashscreen machst, da der offizielle Splashscreen glaube keine Progressbar anbietet.

    ichbinniemand
    Geladen werden müssen die Bilder sowieso, ob er das jetzt über den Formdesigner macht oder nicht.
    Außerdem wird das Application.DoEvents sowieo ja aufgerufen, sobald die Ladezeit vorbei ist, da die Form ja dann in den normalen Zustand übergeht und so.

    Den Splashscreen so musste halt lange genug offen halten und die Ressourcen musst du eigentlich selbst laden, das kann nich vom Splashscreen übernommen werden.
    Ich vermute mal, wenn deine MainForum geöffnet wird, lädt er alles?
    Dann zeig doch den Splashscreen an, lass deine MainForm öffnen, aber versteckt und zeig sie an, wenn alles da is

    Es gibt im .NET Framework eine Klasse, die nen Splashscreen anzeigt, nur weiß ich nicht, wie sie heißt.
    Ansonsten könnteste dir aber auch ne Art Splashscreen aus ner GUI basteln.
    FormBorderStyle None, dann TransparencyKey auf ne Farbe gesetzt und der GUI genau diese Farbe zugwiesen, dann wird die "unsichtbar"
    Danach einfach ein Bild als Backgroundimage nutzen, dieses darf nicht die eingestellte Farbe besitzen und auch möglichst nirgendo transparent sein, sonst gibts Flecken bzw Streifen.
    Dann platzierst du einfach ein Label drauf, dass du dann updaten kannst.
    Am Ende des ladevorgangs aktivierst du deine Hauptform oder so.

    Das sind soweit alle Schritte, die du für nen nachgestellten SplashScreen brauchst.
    Wie gesagt, es gibt auch ne Klasse oder so für, nur ich kenn den Namen nimmer, musste also mal schauen

    ...doch das werden wir bald ändern.
    Somit willkommen Leute zu einem neuen Teil meiner Tutorialserie.
    Es hat wieder über einen Monat gedauert, bis ich mal weitergeschrieben habe, weil ich doch relativ wenig Lust zu irgendwas hatte, auch meine Projekte stockten bisher etwas, jedoch versuche ich dies zu ändern, da ich immerhin nicht ganz untätig sein kann und will.
    In diesem Teil dreht sich alles um die ersten Schritte auf dem Weg zu einem Spiel. (Auch dieses Mal wird alles ausführlich erklärt und mit Farbe versehen, um ein gutes Verständnis zu schaffen)
    Wir werden unser erstes Sprites zeichnen, lernen das Koordinatensystem von XNA kennen und beschäftigen uns kurz mit der Content Pipeline.
    Ok, wir haben unsere Ziele, so lasst uns anfangen.
    Öffnet bitte Visual Studio und euer Projekt, das ihr beim letzten Mal angelegt habt. (Wer den letzten Teil nicht gelesen hat, der kann dies hier nachholen)

    Wir wollen nun unser erstes Sprite laden, damit wir es gleich zeichnen können.
    Fügt dazu über dem Konstruktor unter dem "SpriteBatch spriteBatch" folgendes hinzu:

    Texture2D texture;

    Die Klasse Texture2D kümmert sich um die Aufnahme des Sprites, das wir gleich laden. Alles, was mit unserem Sprite zu tun hat, wird nun durch dieses Objekt repräsentiert.
    Wir wollen nun dafür sorgen, dass wir ein Sprite dem Projekt hinzufügen, welches wir gleich benutzen werden.
    Macht dazu einen Rechtsklick auf das Content-Projekt im Projektmappen-Explorer (heißt bei mir XNATutorialContent (Content), kommt aber auf euren Projektnamen an, wie es genau heißt)
    Im nun auftauchenden Menü wählt ihr Hinzufügen -> Vorhandenes Element


    Wählt nun eine Grafik eurer Wahl aus, sie sollte allerdings nicht zu groß sein, da sie sonst u.U im Spielfenster nicht komplett gezeigt wird.
    Ich benutze für diesen Teil folgende Grafik:

    (Bild stammt aus Google, einfach als Suchbegriff "Erde" (ohne "") eingeben)
    Nachdem ihr nun eure Grafik hinzugefügt habt, sollte sie im Projektmappen-Explorer zu sehen sein. Drückt nun F6, um das Projekt zu erstellen.
    Wir wollen uns nun mal den Ort ansehen, wo die Grafik abgelegt wurde.
    Dazu macht einen Rechtsklick auf den fettgeschriebenen Projektnamen (bei mir: XNATutorial)
    In dem nun auftauchenden Menü wählt Ordner in Windows Explorer öffnen aus.
    Es sollte sich nun ein Explorerfenster öffnen mit eurem Projekt.
    Klickt nun doppelt auf bin -> x86 -> Debug -> Content
    Dort sollte sich eine Datei befinden, die den Namen eurer eben hinzugefügten Datei hat, dazu die Endung .xnb
    Hoppla, wieso hat meine Datei die Endung .xnb, ich habe doch eine Grafik hinzugefügt?
    Nun, das liegt daran, dass XNA die schon im ersten Teil kurz angesprochene Content-Pipeline besitzt.
    In dem Moment, als ihr vorhin F6 gedrückt hab, wurde euer Projekt erstellt.
    Dabei wurde auch die Content-Pipeline angestoßen, sich um euren Content zu kümmern. Wie ich ja schon im ersten Teil erwähnte, läuft der Code auch auf der XBox, somit muss alles kompatibel mit dieser sein.
    Durch die Content-Pipeline wird genau das für euren Content gewährleistet, denn die Content-Pipeline "konvertiert" eure Inhalte in ein spezielles Binärformat mit der Endung .xnb
    Dadurch spielt es keine Rolle mehr, ob die Grafik mal die Endung .jpg oder .png hatte, am Ende ist alles sowieso gleich von der Endung her.
    Wie ihr seht, ist die Content-Pipeline ein nützliches Werkzeug, eben weil sie euren Content verwaltet, braucht ihr nicht erst eine Lösung dafür suchen und implementieren (einbauen), sondern könnt euren Content hinzufügen und gleich mit ihm arbeiten. (Evtl. werde ich mal in einem separaten Artikel genauer auf die Content-Pipline eingehen, das hier ist nur ein grober Überblick, was sie macht.)
    Bevor wir nun das Sprite laden, müssen wir noch kurz etwas klären.
    Klickt einmal mit der Linken Maustaste im Projektmappen-Explorer auf den Eintrag, der euer Sprite repräsentiert.
    Untendrunter sollte sich das Eigenschaftenfenster befinden, in dem einige Daten stehen wie Asset-Name, Buildvorgang, Content-Prozessor (er verarbeitet euren Content nach dem Laden) usw.

    Uns interessiert jetzt im Moment nur die Zeile Asset-Name:
    Der Name, der nebendran steht, das ist euer Name der Datei, ohne die Endung. (Bei mir lautet er firstsprite)
    Wenn ihr wollt, könnt ihr ihn ändern, jedoch merkt ihn euch, wir brauchen ihn gleich nochmal.
    Scrollt nun bitte zur LoadContent()-Methode.
    Dort fügt folgende Zeile vor das base.LoadContent() hinzu (ihr könnt den Kommentar entfernen, wenn ihr wollt):

    texture = Content.Load<Texture2D>("firstsprite");

    Dort, wo bei mir firstsprite steht, tragt nun bitte euren Asset-Name der Datei ein (entweder den, den sie sowieso schon hatte oder den, den ihr eben festgelegt habt, aber bitte zwischen die "" und ohne die Endung .xnb)
    Was wir eben getan haben, ist, den ContentManager anzuweisen, die Datei, die in den runden Klammern steht, mittels Content-Pipline zu laden (der ContentManager steht zwischen unserem Projekt und der Content-Pipeline und ist sozusagen der Vermittler) und eine Referenz (ein Verweis) in unserer eben angelegten Variable zu speichern. Der ContentManager hat noch eine Besonderheit.
    Wenn ihr versucht, eine Datei zu laden, die schon geladen wurde, dann liefert die Load()-Methode des ContentManagers nur die Referenz der bereits geladenen Datei zurück, er lädt sie nicht nochmals.
    Jetzt geht es endlich an Zeichnen des Sprites.
    Scrollt nun zur Draw()-Methode.
    Dort fügt nun folgende Zeilen hinzu: (unter das GraphicsDevice.Clear)

    spriteBatch.Begin();
    spriteBatch.Draw(texture, new Vector2(0,0), Color.White);
    spriteBatch.End();

    Wow, ziemlich viele neue Dinge in diesem kurzen Codestück.
    Bevor ich jedoch den Coden erkläre, wollen wir uns doch mal das Resultat ansehen.
    Drückt dazu F5. Wenn ihr alles richtig gemacht habt, sollte sich nun unser Spielfenster öffnen und darin sollte sich eure Grafik befinden.
    Das Ganze sieht bei mir so aus:

    Sollte es nicht so aussehen, bzw. Fehler auftreten, so habt ihr etwas falsch gemacht. Kontrolliert dann bitte nochmals, ob alles richtig ist. (Wenn es dann trotz Kontrolle nicht geht, kann ein Fehler im Tutorial sein, ich erbitte mir dann eine kurze Mitteilung, damit ich es ausbessern kann)
    Soweit, so gut, nun die Erklärung des Codes:
    Zuerst leiten wir mittels spriteBatch.Begin() den Anfang unserer Zeichenoperationen ein (alle Zeichenoperationen mit dem SpriteBatch müssen sich innerhalb eines Blocks befinden, der mir spriteBatch.Begin() anfängt, es reicht dabei, es einmal zu schreiben)
    Durch den Aufruf dieser Methode wird das Zeichnen vorbereitet, denn intern werden erst alle Daten, die mittels spriteBatch.Draw auf den Bildschirm kommen, gesammelt und dann als Gesamtbild an den Monitor geschickt, nachdem weitere Faktoren Einfluss hatten.

    Nun folgt der erste Aufruf von spriteBatch.Draw(), diese Methode erwartet in der einfachsten Überladung, die wir nutzen, ein Objekt vom Typ Texture2D (unsere texture-variable), danach einen Vector2 (kann man sich als Punkt im Koordinatensystem vorstellen mit x/y-Wert) und die Angabe des Farbtons.
    Color.White bedeutet dabei, dass das Sprite so gelassen wird, wie es ist, denn mittels der Color-Angabe kann man das Sprite färben. (Probiert doch mal zB Color.Red oder so aus und schaut, was passiert)

    Zum Vector2 habe ich ja eben erwähnt, dass es mit einem Punkt in einem Koordinatensystem vergleichbar ist. Es gibt noch den Vector3, für dreidimensionale Inhalte, also 3D-Models oder so und dann noch den Vector4, dessen Sinn ich noch nicht weiß.
    Das Koordinatensystem von XNA ist etwas besonders, so liegt der Punkt (0,0) in der linken, oberen Ecke des Spielfensters, die Y-Achse erstreckt sich nach unten und die X-Achse nach rechts. Beachtet dies, wenn ihr Positionsangaben festlegt.
    Im übrigen wird auch die Position der linken oberen Ecke (man nennt den Punkt das Origin) unseres Sprites über den Vector in spriteBatch.Draw festgelegt. (Die Position des Origins kann man verändern, wie, das zeige ich euch vielleicht später mal)
    Mit spriteBatch.End() wird das Ende der Zeichenoperationen festgelegt, die gesammelten Daten werden aufbereitet und dann an den Monitor geschickt, wo sie schlussendlich gezeigt werden (hoffe ich doch, ansonsten ist der Monitor kaputt =/)

    Damit wären wir wieder einmal beim Ende angelangt.
    Ich hoffe, es gefällt euch auch dieses Mal und ich habe keine Fehler gemacht oder falsche Informationen gegeben.
    Falls doch, so erbitte ich mir eine Meldung, damit ich den Fehler ausbessern kann.
    Im nächsten Teil der Serie, die dieses Mal hoffentlich nicht so lange dauert, bis sie erscheint, geht es um Bewegung und Steuerung.
    Ab diesem Teil wird auch immer das Sample, das wir anfertigen, hier als Download erhältlich sein, falls mal jemand keine Lust hat, den Code selbst zu tippen oder einfach nur eine neue Kopie des Codes brauch. Ich habe den Code so gelassen, wie er ist, also keine weiteren Kommentare hinzugefügt oder welche gelöscht.
    Das Sample für diesen Teil könnt ihr hier herunterladen.
    Ansonsten sehen wir uns beim nächsten Teil wieder.
    Bis dann

    Quelle
    http://www.internetfreak.net/2011/05/15/xna…war-alles-blau/
    https://www.coding-cluster.net

    Wenn ich das richtig sehe, liegt der Fehler einmal bei dem parent::construct, da fehlt die schließende Klammer und dir fehlen am Ende zwei schließende geschweifte Klammern.
    Sollte dann deinen fehler behoben haben, denke ich

    Die Übungscd findeste eigentlich evtla uch im Internet, hab selbst schonmal zu nem Buch die Samples legal gefunden.
    Ansonsten nutz doch die Beispiele im Buch und bau sie in ein Programm zum experimentieren, dadurch lernste immernoch am besten, wenn du selbst mal so Dinger baust, anstatt die fertigen samples durchzulesen und so.
    Natürlich sind die Samples immer gut, wenns ums ganze geht, aber das beste is immernoch Eigenregie

    Schreib alles in den try-Block, was damit zu tun hat, was die Ausnahme verursachen kann.
    Wenn dann ein Fehler auftritt, wird nicht mehr weitergemacht im try-Teil, sondern nach nem passenden catch-Block gesucht.
    Danach gehts unter catch weiter.
    Für Dinge, die immer gemacht werden müssen, auch wenn ein Fehler auftritt oder nicht, bietet sich Finally an, das wird immer am Ende eines try/catch aufgerufen, wenn es vorhanden ist

    Für die Fehlerbehandlung bzw Ausnahmenbehandlung stellt das .NET Framework try/catch zur Verfügung
    In try kommt das rein, was ne Ausnahme verursachen kann und bei catch wird angegeben, was getan werden soll, wenn die angegebene Ausnahme auftritt
    Sollte das sein, was du haben willst

    Mit Visual C# 2010 Express haste Editor, Compiler usw schon alles zusammen.
    Also benötigst du sonst nicht mehr viel an Sachen zum startet außer Ideen und die nötigen anderen Dinge, um deine Ideen zu realisieren zB andere Klassenbibliotheken usw.

    Als Anfänger kann ich dir zB das openBook von GalileoPress empfehlen.
    Eigentlich ganz gut, benutz ich auch manchmal noch kurz zum Nachgucken, wobei ich eher aufs MSDN ausweiche, wenn ich direkt aus VisualStudio die Hilfe aufrufe.
    Der Vorteil am Openbook ist, dass es gratis is, somit also perfekt für den Einstieg, man kann schonmal geldmäßig nichts verkehrt machen^^

    So, habs mir mal angesehn und ich muss sagen, dass ist ein fall, den ich selbst noch nicht erlebt habe.
    Ich hab grad echt keine Erklärung dafür, wieso es so ist.
    Was du ja mit deiner Variable position bestimmst, ist nur die Position des Origins, also standardmäßig die Position der linken oberen Ecke des Sprites.
    Vielleicht liegt es wirklich an der Art der Bewegung, aber normalerweise sollte das nicht so sein, da man sonst ja keine ordentliche Bewegung hinbekommt.

    Mal sehen, ob ich irgendwie auf die Problemlösung komme.

    Du benutzt gameTime.ElapsedGameTime.TotalSeconds, stimmts?
    Wenn ja, dann solltest du das auch weiterhin benutzen, wenn du wirklich auf allen Maschinen gleichschnelles Updaten von deiner Textur haben willst.
    Dein Problem hab ich jetzt noch nicht wirklich beobachtet, kann auch nur ein Effekt sein, der entsteht, da die Textur ja immer wieder bewegt wird pro Frame um ein kleines Stück.
    Aber da es ja mit ganzzahligen Werten geht, ist das eigentlich nicht normal.

    Leider kann ich dir nicht helfen im Moment, haste mal etwas Quellcode für mich?
    Evtl kann mans dann so sehen, woran es liegt.

    Dardan
    Nein, du irrst dich nicht.
    Im RPG Maker XP wird Ruby als Scriptsprache verwendet, halt als RGSS betitelt.
    Und, es ist wahr, sie hätten auch XNA nehmen können, evtl hätten sie mehr Leute bekommen (ich hätte zB ja auch irgendwie dann helfen können, da ich mit XNA immer wieder arbeite)
    Aber ich finde, mit dem RPG Maker gehts genauso gut, dank der Tilesets

    Suru
    Der Poster is Legastheniker, der leider nichtmal ansatzweise deutlich schreiben kann (einmal gings doch, wieso jetzt nimmer, vorallem, wie haste deine Signatur so fehlerfrei hinbekommen? BTW: rechtschreibkorrektur hilft auch Legasthenikern)
    Und er meinte damit, dass ers noch zeigt, aber durch seine Krankheit hat ers eben missverständlich hingeschrieben.

    @SchwarzerMagie Soll jetzt kein Angriff gegen dich sein, was ich geschrieben hab

    Um Texte auszulesen, brauchst du ersteinmal einen Filestream (nich unbedingt nötig, aber u.U sinnvoll)
    Diesen übergibst du dann einem StreamReader (beide Klassen findeste im System.IO Namespace)
    Danach einfach beim Streamreader ReadLine() aufrufen, das liest eine komplette Zeile ein und übegibt diese als String einer Variable (oder einfach ins "nichts")
    Schon hast du deine Zahl und kannst die ändern.
    Fürs Schreiben in eine TXT brauchste nur nen StreamWriter