Laden...

Wie kann ich ein Bild mit Transparenz in mein (Monogame, VS2019) Projekt einbinden?

Erstellt von stefanpc81 vor 3 Jahren Letzter Beitrag vor 3 Jahren 1.653 Views
S
stefanpc81 Themenstarter:in
24 Beiträge seit 2017
vor 3 Jahren
Wie kann ich ein Bild mit Transparenz in mein (Monogame, VS2019) Projekt einbinden?

Hallo,

ich arbeite mit Visual Studio 2019, Monogame 3.7.1 mit DirectX, Windows 10 64-bit. Egal, ob ich eine o.g. PNG-Datei über das "Monogame Pipeline Tool" hinzufüge oder es direkt in den Bereich Projektmappenexplorer - Content hineinziehe, kommt jedes mal beim Debuggen der Fehler

Fehlermeldung:
Microsoft.Xna.Framework.Content.ContentLoadException:
"The content file was not found."
Innere Ausnahme
FileNotFoundException: Could not find file 'F:\PC\Programmierung_C#\MG2\bin\Debug\netcoreapp3.1\Content\test.xnb'.

Wenn ich vor dem Debuggen versuche das Bild über das "Monogame Pipeline Tool" hinzuzufügen, und dann auf "Build" gehe, kommt eine andere Fehlermeldung, welche etwas länger ist und leider nicht über Copy&Paste hier posten kann.

Eine Beispieldatei im Anhang.

Was kann ich versuchen um das Problem zu beheben? Ich habe die Bilder über Paint gezeichnet/bzw. per Screenshot eingefügt und mit Adobe Photoshop Elements 13 den transparenten Bereich erstellt.

S
stefanpc81 Themenstarter:in
24 Beiträge seit 2017
vor 3 Jahren

Warum auch immer, war in einem Projekt auf einmal im "Monogame Pipeline Tool" die PNG-Datei mit einer für Windows typischen Link-Datei dargestellt. In Content.mgcb steht dort der Code

#begin ../../../../test.png
/importer:TextureImporter
/processor:TextureProcessor
/processorParam:ColorKeyColor=255,0,255,255
/processorParam:ColorKeyEnabled=True
/processorParam:GenerateMipmaps=False
/processorParam:PremultiplyAlpha=True
/processorParam:ResizeToPowerOfTwo=False
/processorParam:MakeSquare=False
/processorParam:TextureFormat=Color
/build:../../../../test.png;test.png

Wenn ich diesen in ein anderes Projekt eintrage und die PNG-Datei nur in den Projektmappen-Explorer ziehe, funktioniert er dort auch.

5.657 Beiträge seit 2006
vor 3 Jahren

Das sieht alles sehr ungewöhnlich aus. Bist du sicher, daß das der übliche Workflow mit Monogame ist? Ich habe noch nie mit Monogame oder XNA gearbeitet, und du wirst hier im Forum auch kaum jemanden finden, der damit Erfahrungen hat.

Deswegen hatte ich vorgeschlagen, erstmal mit WinForms oder WPF anzufangen. Um die Linien und Grafiken zu zeichnen, und damit Erfahrung zu sammeln, reicht das nämlich völlig aus. Und zu diesen Technologien gibt es jede Menge Leute mit viel Erfahrung, die dir dabei helfen könnten.

Weeks of programming can save you hours of planning

S
stefanpc81 Themenstarter:in
24 Beiträge seit 2017
vor 3 Jahren

@MrSparkle
Mit den anderen Dateien ist der Workflow mit MonoGame tatsächlich nicht so. Aber das ist nicht weiter schlimm für mich.
Was die Programmierumgebung angeht, sind es nett gemeinte Vorschläge von dir. Ich habe bereits einen Flugsimulator oder besser gesagt, einen Cockpitsimulator, mit Javascript/CSS und HTML gebaut. Mit <DIV> kann man da nämlich ganz schnell Bereiche schaffen, worauf alles gezeichnete am Rand abgeschnitten wird. Das ist dort extrem schnell möglich im Gegensatz zu meinen Bemühungen unter C#/MonoGame. Was mir bei den WinForms und bei WPF nicht gefällt, ist die Benutzeroberfläche die mir zu statisch erscheint. Ich brauche keine Windows-Buttons o.ä. Der Cockpitsimulator der unter einem Browser läuft, gerät von der Rechenleistung her aber an seine Grenzen. Deswegen wollte ich diesen mit einer neuen Programmiersprache neu schreiben, um etwas Neues zu lernen. Du meintest mit "Erfahrung sammeln" wahrscheinlich wie man Linien o.ä. mit X,Y-Koordinaten programmiert. Da muss ich ehrlich sagen, dass ich damit keine großen Probleme habe (Erfahrung mit Javascript) und auch schon mit MonoGame und WPF eigene kleine Übungen gemacht habe. Lediglich für das Clipping an Objekten habe ich noch keine Lösung mit C# bzw. MonoGame gefunden. Aber wie gesagt, WinForms und WPF erscheint mir nicht dynamisch genug. Im Cockpitsimulator muss vieles aktualisiert und grafisch dargestellt werden. Deshalb wurde mir wohl auch von einem anderen User in meinem vorherigen Thread MonoGame als die bessere Variante ans Herz gelegt, was meine Meinung bestätigt.
Mal sehen, wo und wie ich weiter mache.

4.931 Beiträge seit 2008
vor 3 Jahren

Wenn du bei MonoGame bleiben willst, dann mußt du dich wohl mit Shadern auseinandersetzen, s. z.B. Drawing a non rectangular part of Texture2d (besonders die letzte Antwort von "willmotil" - Stichwort: clip(x)).

5.657 Beiträge seit 2006
vor 3 Jahren

Aus eigener Erfahrung kann ich sagen, daß man mit allen genannten Technologien viele tausende oder zehntausende 2D- und 3D-Objekte in Echtzeit rendern kann: WinForms/GDI+, WPF, JavaScript, DirectX, OpenGL etc. Die paar Linien und Grafiken, die du zeichnen möchtest, werden kein System in die Knie zwingen.

Wenn du bei deiner JavaScript-Umsetzung an die Grenzen gestoßen bist, dann liegt es jedenfalls nicht an der Grafik-Performance. Du kannst aber schauen, welcher Teil von deinem Code die meiste Rechenzeit benötigt, und diesen Code dann optimieren. Dazu gibt es ein Tool namens Profiler, der ist in VisualStudio integriert (für C#-Code), und inzwischen auch in jedem Browser (für JS-Code).

Wenn du sowieso schon alles einmal in JS umgesetzt hast, würde ich empfehlen, lieber erstmal deinen vorhandenen Code zu optimieren, ehe du anfängst, eine neue Technologie zu erlernen und damit dann wieder die gleichen Fehler machst. Das meinte ich u.a. mit "Erfahrung sammeln".

So ähnlich hatte ich es damals auch schon in Welche Entwicklungsumgebung für einen Flugsimulator? formuliert.

Und ein Link zu dem Clipping-Problem hatte ich bereits hier gepostet: Kann ich mit MonoGame ein Objekt definieren, auf dem jeglicher Inhalt am Rand abgeschnitten wird?

Weeks of programming can save you hours of planning