kann es sein, dass er an einer alten DirectX version gescheitert ist? Normale .NET Programme gehen auf dem Rechner. Wie findet man diese Version eig. heraus?
er wäre glaube ich gut, alles was eine Update methode hat von Component abzuleiten, das heißt (ich weiß nicht genau ob das üblich ist, fände es aber sinnvoll) der GameScreen methode auch eine Komponentensammlung zuzufügen.
edit:spellcheck
edit2 Beziehungsweise DrawableComponent, wenn es eine Drawmethode gibt.
Anmerkungen:
ich würde keinen Timer benutzen. Man schribt alles in die Update methoden und benutzt die GameTime instanz, um sich die Zeitdifferenzen auszurechnen,
editx:zum Spiel: baue vielleich die möglichkeit ein, eine Pfeilaste gedrücktzuhalten, wobei sich der Stein pro sekunde soundso oft in die jeweilige Richtung verschoben wird. Ihc finde es ein wenig lässtig, immer wieder auf die Taste hauen zu müssen, wenn man das Ding einfach an die Bande schieben will.
Das angegebene Modul wurde nicht gefunden. (Ausnahme von HRESULT: 0x8007007E)
Space In Vision 2
bei Space_in_Vision.Game1..ctor()
bei Space_in_Vision.Program.Main(String[] args)
Void .ctor()
ich wüsste gerne was da nicht stimmt. Das problem war auch dann schon da, als ich versucht habe, die DLL´s alle mit reinzupacken. Jatzt habe ich mit NSIS eine Setupdatei gemacht, die beide Runtimes installiert, und was passiert?- es geht immernoch nichts! Fehlermeldung war damals genau die selbe! Weiß jemand, was das soll?
auch wenn das offenbar keinen interessiert: ich habe jetzt eine einigermaßend funktionierende Lösung.
Name "Space_In_Vision"
OutFile "Space_In_Vision_Setup.exe"
InstallDir $PROGRAMFILES\Space_In_Vision
Page directory
Page custom InstallRuntimes
Page instfiles
UninstPage uninstConfirm
UninstPage instfiles
Section ""
SetOutPath $INSTDIR
File C:\Projekt\Space_In_Vision.exe
File C:\Projekt\Highscores.txt
File /r C:\Projekt\Content
WriteUninstaller $INSTDIR\uninstall.exe
SectionEnd
Section "Uninstall"
Delete "$INSTDIR\Highscores.txt"
Delete "$INSTDIR\Space_In_Vision.exe"
RMDIR /r "$INSTDIR\Content"
Delete "$INSTDIR\uninstall.exe"
RMDir $INSTDIR
SectionEnd
Function InstallRuntimes
SetOutPath $INSTDIR
MessageBox MB_YESNO "wollen Sie Das .NET Framework Verision 3.0 Restibutable installieren? Es wird zur ausführung des Programms benötigt und auf Windows Vista bereits vorhanden. Drücken Sie nur Nein, wenn Sie sicher sind, dass es auf Ihrem System bereits vorhanden ist, sonst wird das Programm nicht funktionieren." IDNO noinstall
MessageBox MB_OK "Installationsvorgang wird gestartet"
File C:\Projekt\dotnetfx3setup.exe
ExecWait '"$INSTDIR\dotnetfx3setup.exe"'
Delete $INSTDIR\dotnetfx3setup.exe
noinstall:
MessageBox MB_YESNO "wollen Sie Das XNA Framework Verision 2.0 Restibutable installieren? Es wird zur ausführung des Programms benötigt. Drücken Sie nur Nein, wenn Sie sicher sind, dass es auf Ihrem System bereits vorhanden ist" IDNO noinstall2
File C:\Projekt\xnafx20_redist.msi
MessageBox MB_OK "Installationsvorgang wird gestartet"
;ExecWait '"$INSTDIR\xnafx20_redist.msi"'
ExecWait 'msiexec.exe /qb /i "$INSTDIR\xnafx20_redist.msi"'
Delete $INSTDIR\xnafx20_redist.msi
noinstall2:
FunctionEnd
ich will mit dem File Befehl alles(auch unterordner) einbinden, was in einem Ordner enthalten ist.
warum geht das so nicht?
File /r /x C:\Projekt\Content
Anleitung die ich offenbar nicht ganz verstehe:
Zitat
4.9.1.5 File
[/nonfatal] [/a] ([/r] [/x file|wildcard [...]] (file|wildcard) [...] | /oname=file.dat infile.dat)
Adds file(s) to be extracted to the current output path ($OUTDIR).
Note that the output file name is $OUTDIR\filename_portion_of_file.
Use /oname=X switch to change the output name. X may contain variables and can be a fully qualified path or a relative path in which case it will be appended to $OUTDIR set by SetOutPath. When using this switch, only one file can be specified. If the output name contains spaces, quote the entire parameter, including /oname, as shown in the examples below.
Wildcards are supported.
If the /r switch is used, matching files and directories are recursively searched for in subdirectories. If just one path segment is specified (e.g. File /r something), the current directory will be recursively searched. If more than one segment is specified (e.g. File /r something\*.*), the last path segment will be used as the matching condition and the rest for the directory to search recursively. If a directory name matches, all of its contents is added recursively. Directory structure is preserved.
Use the /x switch to exclude files or directories.
If the /a switch is used, the attributes of the file(s) added will be preserved.
The File command sets the error flag if overwrite mode is set to 'try' and the file could not be overwritten, or if the overwrite mode is set to 'on' and the file could not be overwritten and the user selects ignore.
If the /nonfatal switch is used and no files are found, a warning will be issued instead of an error.
File something.exe
File /a something.exe
File *.exe
File /r *.dat
File /r data
File /oname=temp.dat somefile.ext
File /oname=$TEMP\temp.dat somefile.ext
File "/oname=$TEMP\name with spaces.dat" somefile.ext
File /nonfatal "a file that might not exist"
File /r /x CVS myproject\*.*
File /r /x *.res /x *.obj /x *.pch source\*.*
Note: when using the /r switch, both matching directories and files will be searched. This is always done with or without the use of wildcards, even if the given path perfectly matches one directory. That means, the following directory structure:
<DIR> something
file.dat
another.dat
<DIR> dir
something
<DIR> dir2
file2.dat
<DIR> another
<DIR> something
readme.txt
with the following File usage:
File /r something
will match the directory named something on the root directory, the file named something in the directory named dir and the directory named something in the directory named another. To match only the directory named something on the root directory, use the following:
File /r something\*.*
When adding \*.*, it will be used as the matching condition and something will be used as the directory to search. When only something is specified, the current directory will be recursively searched for every and directory named something and another\something will be matched.
und warum geht das nicht?
MessageBox MB_YESNO "wollen Sie Das .NET Framework Verision 3.0 Restibutable installieren? Es wird zur ausführung des Programms benötigt und auf Windows Vista bereits vorhanden. Drücken Sie nur ""Nein"", wenn Sie sicher sind, dass es auf Ihrem System bereits vorhanden ist, sonst wird das Programm nicht funktionieren." IDNO false
File C:\Projekt\dotnetfx3setup.exe
DetailPrint "Installationsvorgang wird gestartet"
File C:\Projekt\dotnetfx3setup.exe
ExecWait '"$INSTDIR\dotnetfx3setup.exe"'
false:
Fehlermeldung(sagt wie man es richtig machen soll)
ich kriege einfach kein Funktionierendes Script hin. Der "File" Befehl kopiert die Dateien in die Installdatei? Meine Englisch kenntnisse sind leider noch etwas wankend, und die Fehlermeldungen des Compilers haben ungefähr die Aussagekraft von "Fehler Zeile 7", dabei bin ich sogar unsicher ob der die Kommentare mitrechnet. Muss man das Teil irgenwie bestimmt anfangen?
oh mein Gott. Das ist ja noch viel komplizierter als C#. Ich werde es mir wohl alles durchlesen müssen, aber mit meinen Englischkenntnissen habe ich das Ding dann spätestens in 3 Wochen, das ist zu spät.
Kann mir vielleicht jemand eine Form ein Script zeigen, wo XNA und .NET 3 installiert werden, und das nicht aus dem Internet, wie in dem Link(man darf doch die Intalldatei vom Framework mit reinstecken, oder? Und das geht doch, oder?)
Ich glaube das mit dem Filecopieren schaffe ich jetzt bereits. Hoffentlich schaffe ich es noch rechtzeitig. Auf Morgen wid´s wohl nichts mehr, aber vielleicht bis Freitag? Das Wäre dann der Totestermin.
ist es möglich mit "nullsoft scriptable install system" auf bestimmte Runtimes zuprüfen, und diese falls nötig zu installieren?
(schade, dass ich kein c++ mehr kann(alles vergessen), dann könnte ich mir eine Installdatei selber progen, die nur das .NET Framework installiert, und dann würde mein Programm den rest selber machen)
ich würde sagen, dass es sinnvoller wäre(als das was du machst) im Konstruktor der Form dem Konstruktor der Klassen eine this Referenz zu übergeben. Dass es besser ist, Bals die staticvariable in der Programmklasse bin ich mir ziemlich sicher.
pack die Klassen doch nicht alle in eine Datei
was soll das Teil überhaupt machen? Schaue mal ob ich ein Paar Vorschläge für bessere Lösungen finde.
kenns du MaskedTextbox? Ist besser als alle chars einzeln prüfen. Vor allem bei so einfachen Sachen, wie nur Zahlen
ich bin nicht sicher, ob die statische Formvariable in der Programmklasse guter stil ist.
wozu hast du die Methode textBox1_KeyPress in der Formklasse? So eine Textbox gibt es nicht., dh. sie wird nie aufgerufen
1 Frage: wenn man .NET 3 hat, gehen doch .NET 2 Progrme auch, oder? (bin mir sogar ziemlich sicher)
Ihc würde mir gerne verschiedene Artikel darüber durchlesen, (werde ich auch tun, also nichts gegen Links), aber ich muss die Datei leider bis morgen(also eig. heute noch) haben. Kann mir jemand ein einfache Möglichkeit(InstallationsDateiEditor, od. so) nennen, die mein Programm in einen Ordner koppiere, dann .NET 3 Runtime installiere, wobei ich die Datei gerne mit reinpacken würde, die Lizens davon dann auch noch anzeigen, das sellbe mit XNA, natürlich vorher überprüfen ob nicht schon drauf. Am Ende vielleicht noch Desktopverknüpfung, muss aber nicht unbedingt sein. Ich hoffe sowas ist in der kurzen Zeit möglich. Dieses Forum zeichnet sich ja dadurch aus, dass man sehr schnell ein Antwort bekommt. Und bitte, wenn es irgend ein Script dafür bedarf, ich werde wahrscheinlich nicht an einem Tag eine solche Scriptsprache lernen können. Vielen Dank im Voraus.
@herbivore: Man bin ich blöd Das ist ja völliger Käse alles wieder zurückzuverlagern! Das hätte mir auch ohne den FAQ Thread klar sein müssen. Ich glaub ich geh dann ins Bett. So kann ich nicht progen(mit Hirn:off)
@simons
gewöhndir das DoEvents aber nciht an, das ist nich so toll.
ich hoffe(wie immer) das ist kein Mist, aber ich würde die Methode mit Invoke aufrufen(edit: das heißt, die foreachschleife in eine eigene Methode packen diese mit invoke aus dem Handler aufrufen), und dann (nicht das sellbe) mii Invoke auf die Controls zugreifen.
das ist der absolute Zeitpunkt, in der du den Tetrisstein erstellt hast. Das muss eine Membervariable des Steins sein. Benutzt du Listen mit Steinobjekten? Die Conmponentsauflistung(gut, da weiß ich nicht wie das mit Threading ist). Ehrlihcgesagt bin ich nicht sicher, ob es wirklich Nachteile mit sich bringt, Timer zu benutzen, aber ich bin ziemlich sicher, dass es in XNA unüblich ist.
[offtopic]edit: ihr werdet euch jetzt wundern, warum ich nach so langer Zeit nochmal schreibe. Ich habe den PC ne Weile stehen lassen, desshalb war ich zu langsam, und zwar viel zu langsam.[/offtopic]
dann hab ich doch die falsche veerssion rein. Schade, wenns so nicht geht, müsste man das Ding austauschen. Hoffentlich macht das Herbivore nicht zu viel Arbeit. Ich warte erstmal auf Rückmeldung, ob das Austauschen nötig ist. Warum die CPU lahm ist weoiss ich jetzt nicht.
[EDIT=herbivore]Von der neuen Version schreibt ANSI_code:
Zitat
ich habe das Projekt in .NET 2 und XNA 2 konvertiert. Leider ging dabei der Sound verloren, da ich das mit diesen ganzen komischen Wave Banks zu blöd fand - XNA 3 hat da bessere Lösungen.
Deshalb habe ich die alte Version am Anfang gelassen und die neue Version hier angehängt.[/EDIT]
@Jdamwie gesagt, das könnte man natürlich noch optimieren, aber es muss ja nicht unbedingt perfekt sein. Dann müsste ich einfach die Sterbeabfragen umschreiben. Wie du richtig erkann hast prüfe ich auf die Spitze.
Sonst vielen Dank für den Komentar!
@michlG
die XNA Runtime musst du dir wohl oder übel hohlen müssen, wenn du es ausführen willst.
In dem Fall macht man sowas nicht. Dann has du ein Chaos aus Locks. Mach sowas in der Art:
Vector2 SteinLocation;//hast du irgendwo her
int SteinSpeed; //""
int CreationTimeInSec //""
SteinLocation=new Vector2(0, SteinSpeed*((int)gameTime.TotalGameTime.TotalSeconds-CreationTimeInSec));
Hoffe das ist kein Mist, aber ich beschäfftige mich ein Bisschen mit XNA und habe das mit den Timern schon mal erlebt.
was heißt denn eigentlich "Initial Pulse Profile" ist ein Bisschen Peinlich, aber ein passender Sinn des Wortes Initial in diesem Kontxt ist mir nicht bekannt.
ich hatte nicht die Absicht irgendeinen Namen zu koppieren. Mit dem DirectX bin ich jetzt iritiert. Schaue nochmal nach.
edit: sorry, habe mich geirrt. Nur die neuste 9. Version von DirectX wird benötigt.
edit2: ich sehe gerade, dass bereits 7 Stück das Teil gedownloaded haben, aber keiner ein Kommentar dazu abgegeben. Wenns nicht geht, sagts mir. Ich befürchte ich habe die Falsche Version davon hingeschikt. Nämlich die vom XNA3(ich dürfte eigentlich auch nämlich mit h schreiben)
Mein erstes kleines 2D XNA Spielchen, und ich würde mich sehr freuen, wenn es ein paar von euch ausprobieren. Wie ihr sicher alle wisst, benötigt es zur Ausführung DirectX10 und XNA Runtime 2.0. Der Titel soll ein Wortspiel sein und auf "Space Invasion" zurückzuführen ;(schön ist dof, ich geb´s zu) Es gibt ein Bisschen Sound, meiner Ansicht nach für ein erstes Spielchen annehmbare Grafik, von der ein Großteil von einem Klassenkameraden gezeichnet wurde, Teile davon sind Animiert(erwatet nicht zu viel).
Das Ziel des Spiels ist es, möglichst viele Punkte zu machen, da es unendlich viele Levels gibt. leider gibt es pro zerstörtes Schiff zwar immer mehr Pukte, je weiter man in den Levels kommt, aber immer genau gleich-viel-mehr.
Man kann sich nach links und rechts fahren und dabei schießen. Dabei werden die Gegner ne nach Level immer robuster, aggressiver(schießen öfers) und intelligenter(weichen mehr aus) und sehen wie Käfer aus.
Es gibt 4 verschiedene Munitionstypen, die sich in Schaden Aussehen und Geschwindigkeit unterscheiden(Normale Munition(muss nicht eingesammelt werden), Plasma, Laser und Super) und 5 Bonusarten(Leben, alle Munitionen außer Normal, Punkte) , die manchmal bei Zerstörung von Gegnern mit unterschiedlicher Häufigkeit runterfallen und eingesammelt werden müssen/können.
Es ist vor allem Einem Huenenschneider aus dem XNA.Mag Forum zu danken, der mir freundlicherweise die Explosion ermöglicht hat, natürlich allen in diesem Forum hier und Herbivore, der das Hochladen des Projekts überhaupt erst ermöglicht hat.
sagt mir was ihr davon haltet, und bedenkt vor allem, dass es mein erstes Spiel ist.
Screenshots mache ich gleich noch.