2 Probleme mit 360° Space-Shooter
Übersicht

Nichts95Betreff: 2 Probleme mit 360° Space-Shooter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also, kommen wir gleich zur Sache^^
1. Problem: Ich habe ein Problem mit der Transparenz! Beim "Startbild", wo ich also noch keine Taste gedrückt habe, läuft noch alles ok. Wenn ich allerdings das Raumschiff drehe, geht die Transparenz sofort weg und ich sehe anstatt Transparenz die Transparenz-farbe... Ich habe das MaskImage in die For-Schleife getan, also so: Code: [AUSKLAPPEN] For grad = 0 To 359 ;Bilder für Gräde spielergrafik(grad) = LoadImage("Grafiken\Raumschiffe\speeder.bmp") RotateImage spielergrafik(grad),grad ;Bild wird gedreht MaskImage spielergrafik(grad),255,0,255 Next 2. Problem: Das Raumschiff dreht sich viel zu schnell.... Hier das wichtigste: Code: [AUSKLAPPEN] ... Global player.spieler=New spieler player\hochgeschwindigkeit#=4 player\beschleunigung#=0.12 player\wendigkeit#=1 ... Function steuerung() If KeyDown(203)Then player\grad#=player\grad-player\wendigkeit# If KeyDown(205)Then player\grad#=player\grad+player\wendigkeit# If player\grad#>=360 Then player\grad#=player\grad# Mod 360 If player\grad#<0 Then player\grad#=360+player\grad# If KeyDown(200) Then If player\spx#<Cos(player\grad#)*player\hochgeschwindigkeit# Then player\spx#=player\spx#+Abs(Cos(player\grad#)*player\beschleunigung#) If player\spx#>Cos(player\grad#)*player\hochgeschwindigkeit# Then player\spx#=player\spx#-Abs(Cos(player\grad#)*player\beschleunigung#) If player\spy#<Sin(player\grad#)*player\hochgeschwindigkeit# Then player\spy#=player\spy#+Abs(Sin(player\grad#)*player\beschleunigung#) If player\spy#>Sin(player\grad#)*player\hochgeschwindigkeit# Then player\spy#=player\spy#-Abs(Sin(player\grad#)*player\beschleunigung#) End If End Function PS: Wenn ihr eine Lösung für mich habt dann schreibt bitte für welches Problem^^ |
||
![]() |
ChaosCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
zu 2.:
mach doch einfach die wendigkeit weniger o_O Hab nur kurz draufgeguckt wenns falsch is schlag mich^^ |
||
Projekte: Geolaria | aNemy
Webseite: chaosspace.de |
Nichts95 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hab's mal mit 0.10 versucht, naja, wenn ich richtig gesehen habe war das sogar noch schneller...^^ Naja, er hat mir in einer Funktion, die ich dummerweise nicht gezeigt habe, einen Fehler markiert, nämlich das Drawimage hier:
Code: [AUSKLAPPEN] Function spieler_malen() DrawImage spielergrafik(Int(player\grad#)),0,0 End Function Er hat mir geschrieben "This image does not exist" - was ich allerdings nicht verstehe wieso er mir das schreibt, denn am Anfang wenn ich keine Taste berühre zeigt er ja das Raumschiff an... Ich vermute mal das wird was mit der For-schleife zutun haben... |
||
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Benutze TFormFilter 0 dann sollte es Transparentz sein.
Einfach über der For Next Schleife hinschreiben. MfG |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
Nichts95 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jap, klappt jezt mit der Transparenz... Fehlt jetzt nur noch die Lösung wegen diesem schnellem Drehen^^ | ||
![]() |
ChaosCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nichts95 hat Folgendes geschrieben: Hab's mal mit 0.10 versucht, naja, wenn ich richtig gesehen habe war das sogar noch schneller...^^
Das glaube ich allerdings nicht, dann würde es daran liegen, dass du keinen fps begrenzer drin hast oder frameabhängig programmiert hast, denn du rechnest ja grad-wendigkeit bzw +wendigkeit wenn die taste heruntergedrückt ist (keydown) und wenn die wendigkeit kleiner wird so wird er auch pro frame weniger gedreht. Nichts95 hat Folgendes geschrieben: Naja, er hat mir in einer Funktion, die ich dummerweise nicht gezeigt habe, einen Fehler markiert, nämlich das Drawimage hier:
Code: [AUSKLAPPEN] Function spieler_malen() DrawImage spielergrafik(Int(player\grad#)),0,0 End Function Er hat mir geschrieben "This image does not exist" - was ich allerdings nicht verstehe wieso er mir das schreibt, denn am Anfang wenn ich keine Taste berühre zeigt er ja das Raumschiff an... Ich vermute mal das wird was mit der For-schleife zutun haben... Lass dir dochma ausgeben welchen Wert player\grad# bzw Int(player\grad#) hat, damit könntest du dem fehler auf die schliche kommen. Der Int muss ja zwischen 0 und 359 liegen, denn nur für die wurde das Bild gedreht und geladen. EDIT: Mir ist grad noch aufgefallen, dass du das array spielergrafik nicht global gemacht hast, woraufhin in der function das array leer ist. meiner meinung nach müsste dann zwar ein array out of bounds kommen, aber vllt irre ich mich. MfG Chaos |
||
Projekte: Geolaria | aNemy
Webseite: chaosspace.de |
Nichts95 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Naja, also als ich ihn ausgegeben habe konnte ich feststellen das das er dann bei (warscheinlich ![]() |
||
![]() |
ChaosCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also einen Framebegrenzer kriegst du mit CreateTimer und WaitTimer hin.
Schau dir einfach mal die Befehle an. Ich empfehle dir das aber nicht so zu machen, da wenn der Rechner dann eh schon weniger fps schafft als der maximalwert alles zu langsam läuft => problem bei älteren Rechnern Deshalb solltest du frameunabhängig programmieren, so läufts auf jedem PC gleich schnell, Tut gibts hier: https://www.blitzforum.de/foru...abh%E4ngig Und naja ein Int "rundet" nicht, er schneidet halt alles was hinterm komma is ab. und nich wie wir aufrunden oder abrunden. Welchen Index hatte den das array spielergrafik, als er "Image does not exist" geschrieben hat? 360? MfG Chaos |
||
Projekte: Geolaria | aNemy
Webseite: chaosspace.de |
Nichts95 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja, hat geklappt mit dem Frame-zähler, bewegt sich nicht mehr schnell ![]() ![]() Code: [AUSKLAPPEN] For grad = 0 To 359 ;Bilder für Gräde If grad = 360 Then grad = 0 If grad = -1 Then grad = 359 spielergrafik(grad) = LoadImage("Grafiken\Raumschiffe\speeder.bmp") RotateImage spielergrafik(grad),grad ;Bild wird gedreht MaskImage spielergrafik(grad),255,0,255 Next |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
For grad = 0 To 359 ;Bilder für Gräde
If grad = 360 Then grad = 0 If grad = -1 Then grad = 359 spielergrafik(grad) = LoadImage("Grafiken\Raumschiffe\speeder.bmp") RotateImage spielergrafik(grad),grad ;Bild wird gedreht MaskImage spielergrafik(grad),255,0,255 Next Dass kann auch so garnicht gehen, da "grad" nur Zahlen von 0 bis 359 sein kann! Also NIE 360 oder -1 ![]() |
||
Twitter
Download Jewel Snake! Windows|Android |
Nichts95 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja, nur wenn ich 360 durch 359 und -1 durch 0 erstze hilft mir das erst recht nicht, denn dann bekomme ich das Programm nicht gestartet und er schreibt mir gleich "Image does not exist"... | ||
![]() |
ChaosCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Lass die beiden hinzugefügten If Bedingungen mit 360 und -1 erstmal ganz weg und ersetz die folgende Funktion:
Code: [AUSKLAPPEN] Function spieler_malen()
DrawImage spielergrafik(Int(player\grad#)),0,0 End Function durch Code: [AUSKLAPPEN] Function spieler_malen()
while player\grad>359 player\grad=player\grad mod 360 wend while player\grad<0 player\grad=player\grad+360 wend DrawImage spielergrafik(Int(player\grad#)),0,0 End Function |
||
Projekte: Geolaria | aNemy
Webseite: chaosspace.de |
Nichts95 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hmm... Dann kann ich bis zum Moment drehen wo Image does not exist kommt und dann bleibt's hängen! | ||
![]() |
ChaosCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schmeiß den Debug an und guck welchen index das array spielergrafik hat. Müsste links irgendwo stehen was die variable player\grad# aktuell fürn Wert hat.
Oder präsentiere mehr code, weil im angegeben code liegts nich (soweit ich gucken kann). |
||
Projekte: Geolaria | aNemy
Webseite: chaosspace.de |
Nichts95 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok, hier mal den aktuellen Code:
Code: [AUSKLAPPEN] Graphics 800,600,16,1 ;Grafikeinstellungen ;SetBuffer BackBuffer() TFormFilter 0 AutoMidHandle 1 SeedRnd MilliSecs() Dim spielergrafik(360) For grad = 0 To 359 ;Bilder für Gräde spielergrafik(grad) = LoadImage("Grafiken\Raumschiffe\speeder.bmp") RotateImage spielergrafik(grad),grad ;Bild wird gedreht MaskImage spielergrafik(grad),255,0,255 Next Type Spieler ;Daten über Spieler... Field x# Field y# Field grad# Field spx#,spy# Field beschleunigung#,geschwindigkeit#,hochgeschwindigkeit#,wendigkeit# ;Hochgeschwindigkeit = Höstgeschwindigkeit End Type Global player.spieler=New spieler player\hochgeschwindigkeit#=4 player\beschleunigung#=0.12 player\wendigkeit#=0.10 Origin 400,300 ;Mittelpunkt erstellen Repeat ;Hauptschleife - Anfang startzeit = MilliSecs() steuerung() versetzung() spieler_malen() Flip 0 schleifenzeit = MilliSecs() - startzeit Until KeyDown(1) ;Hauptschleife - Ende (Bei ESC-Druck) Function steuerung() If KeyDown(203)Then player\grad#=player\grad-player\wendigkeit# If KeyDown(205)Then player\grad#=player\grad+player\wendigkeit# If player\grad#>=360 Then player\grad#=player\grad# Mod 360 If player\grad#<0 Then player\grad#=360+player\grad# If KeyDown(200) Then If player\spx#<Cos(player\grad#)*player\hochgeschwindigkeit# Then player\spx#=player\spx#+Abs(Cos(player\grad#)*player\beschleunigung#) If player\spx#>Cos(player\grad#)*player\hochgeschwindigkeit# Then player\spx#=player\spx#-Abs(Cos(player\grad#)*player\beschleunigung#) If player\spy#<Sin(player\grad#)*player\hochgeschwindigkeit# Then player\spy#=player\spy#+Abs(Sin(player\grad#)*player\beschleunigung#) If player\spy#>Sin(player\grad#)*player\hochgeschwindigkeit# Then player\spy#=player\spy#-Abs(Sin(player\grad#)*player\beschleunigung#) End If End Function Function versetzung() player\x#=player\x#+player\spx# player\y#=player\y#+player\spy# End Function Function spieler_malen() Cls While player\grad>359 player\grad=player\grad Mod 360 Wend While player\grad<0 player\grad=player\grad+360 Wend DrawImage spielergrafik(Int(player\grad#)),0,0 End Function |
||
![]() |
ChaosCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Function spieler_malen()
Cls While player\grad=>360 player\grad=player\grad Mod 360 Wend While player\grad<0 player\grad=player\grad+360 Wend DrawImage spielergrafik(Floor(player\grad)),0,0 End Function Soooo, so sollte es laufen! War n Kleiner Denkfehler. |
||
Projekte: Geolaria | aNemy
Webseite: chaosspace.de |
Nichts95 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok, funktioniert jetzt! ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group