Probleme mit ResetCollision (problem gelöst)
Übersicht BlitzMax, BlitzMax NG Allgemein
DreamoraBetreff: Probleme mit ResetCollision (problem gelöst) |
Mo, März 07, 2005 8:31 Antworten mit Zitat |
|
---|---|---|
Hallo zusammen
Ich programmiere aktuell an einem Projekt, dass ich eigentlich gerne einigermassen vorwärts bringen würde, solange ich noch Ferien habe. Dabei knabber ich jedoch seit über einer Woche an einem massiven Problem, dass in 1.03 als auch 1.04 und 1.05 besteht: Wenn ich in meinem Projekt "ResetCollision" aufrufe, tickt das gesammte Programm aus. Grösstes Problem ist, dass die Grafiken sich in total unbestimmbare Richtungen bewegen ( eigentlich bewegen sich alle in Richtung Bildschirmmittelpunkt, mit ResetCollision aktiv bewegen sie sich jedoch überall hin, nur net auf den Mittelpunkt zu ) Haben damit auch andere Probleme? Verwendet wurden dabei nur Tastatureingabe, Mauseingabe, FlushMem, ResetCollision ( vor Flushmem, beides in der Mainloop ) und CollideImage für die COLLISION_LAYER_ 1 und 2. Sollten die Probs niemandem bekannt sein, werde ich sonst versuchen ein lauffähiges Beispiel zu schreiben, das den Bug enthält. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
- Zuletzt bearbeitet von Dreamora am Di, März 08, 2005 14:18, insgesamt einmal bearbeitet
Plasma(alt)Betreff: hmm |
Mo, März 07, 2005 20:17 Antworten mit Zitat |
|
---|---|---|
würde ja gerne mal helfen !
give me da code |
||
DIV is dead ! |
Dreamora |
Di, März 08, 2005 12:37 Antworten mit Zitat |
|
---|---|---|
Hier ist ein Testcode.
Einfach resetcollisions ein und aus schalten, dann wirst du sehen was ich meine ... Code: [AUSKLAPPEN] Strict
Graphics 800, 600, 0 Const ball_normal = 1 Const ball_explosion = 2 Const ball_wave = 3 Const ball_whirl = 4 Const ball_static = 5 Const debug = 0 Global exit_state:Byte = False Local last_ball:Int Local fps_counter:TFPS_COUNTER = New TFPS_COUNTER Local list1:T_BALL = New T_BALL list1.destroy list1 = Null FlushMem fps_counter.update Draw_Ball #mainloop Repeat If exit_state Exit mainloop EndIf Cls If MilliSecs() - last_ball > 2000 create_ball last_ball = MilliSecs() EndIf Draw_Debug (fps_counter) Handle_Key_Input T_BALL.update (COLLISION_LAYER_1, fps_counter.fps()) fps_counter.update FlushMem ResetCollisions( COLLISION_LAYER_ALL ) Flip Forever Function Draw_Ball () Cls SetColor 0, 150, 150 DrawOval 0,0,32,32 Local img:TIMAGE = CreateImage( 32, 32 ) GrabImage img, 0, 0 T_BALL.set_graphic (img) Cls Flip End Function Function Draw_Debug( counter:TFPS_COUNTER ) SetColor 255, 255, 255 DrawText "Bilder pro Sekunde: " + counter.fps(), 0, 0 DrawText "Anzahl Bälle: " + T_BALL._list.count(), 0, 20 End Function Function Handle_Key_Input() If KeyHit( KEY_ESCAPE ) exit_state = True EndIf End Function Function create_ball() Local i,j:Int i = Rand ( 0, 1 ) Select i Case 0 ' x j = Rand ( 0, 1 ) Select j Case 0 ' links T_BALL.make ( 0, Rand( 0, GraphicsHeight() -1 ), ball_normal ) Case 1 ' rechts T_BALL.make ( GraphicsWidth()-1, Rand( 0, GraphicsHeight() -1 ), ball_normal ) End Select Case 1 ' y j = Rand ( 0, 1 ) Select j Case 0 ' oben T_BALL.make ( Rand( 0, GraphicsWidth() - 1 ), 0, ball_normal ) Case 1 ' unten T_BALL.make ( Rand( 0, GraphicsWidth() - 1 ), GraphicsHeight() - 1, ball_normal ) End Select End Select End Function Type T_BALL ' Type der Metallkugel Global _graphic:TImage Field _x, _y:Int Field _tx, _ty, _force_x, _force_y:Float Field _type:Int Field _frame:Int Global _list:TList Function make:T_BALL( x:Int, y:Int, typ:Int ) ' force_x / force_y sind die einheiten pro Sekunde! Local temp:T_BALL temp = New T_BALL temp._x = x temp._y = y temp._tx = x temp._ty = y temp._type = typ If typ <> 5 ' Ball auf den Mittelpunkt ausrichten temp._force_x = Float( Float(GraphicsWidth() / 2.0) - x )/2.5 temp._force_y = Float( Float(GraphicsHeight() / 2.0) - y )/2.5 EndIf Return temp End Function Function update( col_layer_index:Int, fps:Int ) ' Updatet die Positionen aller Metalkugeln If debug Print "Ball Update started!" EndIf Local list:TListEnum = _list.ObjectEnumerator() While list.HasNext() T_BALL(list.NextObject()).update_me (col_layer_index, fps) Wend If debug Print "Ball Update finished!" EndIf End Function Function set_graphic ( image:TIMAGE ) _graphic = CreateImage ( ImageWidth( image ), ImageHeight( image ), 1, MASKEDIMAGE ) Cls DrawImage image, 0, 0 GrabImage _graphic, 0, 0 MidHandleImage _graphic End Function Function get_graphic:TIMAGE () Return _graphic End Function Method New() If _list = Null _list = New TList EndIf _list.addlast ( Self ) End Method Method Delete() _list.remove ( Self ) End Method Method x:Int() Return _x End Method Method y:Int() Return _y End Method Method update_me( col_layer_index:Int, fps:Int ) ' Updatet die Position der Metalkugel If x() >= 0 And x() < GraphicsWidth() And y() >= 0 And y() < GraphicsHeight() Local collision:Object[] Local OutputText:String Local ok:Int collision = CollideImage ( get_graphic(), Int( _tx + _force_x/Float(fps) ), Int( _ty + _force_y/Float(fps) ) , 0, col_layer_index | COLLISION_LAYER_2, 0, Self) ok = True For Local temp:Object= EachIn collision ok = False If T_BALL (temp) And T_BALL (temp) <> Self OutputText = "Ball Hit! :-)" destroy() T_BALL (temp).destroy() EndIf Next If ok And _type <> 5 _tx :+ _force_x/Float(fps) _ty :+ _force_y/Float(fps) _x = _tx _y = _ty EndIf CollideImage ( get_graphic(), x(), y(), 0, 0, COLLISION_LAYER_2, Self) DrawImage get_graphic(), x(), y() If Len( OutputText ) > 1 DrawText OutputText, x(), y() EndIf Else destroy() EndIf End Method Method destroy() ' Zerstört diese Metalkugel _list.remove ( Self ) End Method End Type Type TFPS_COUNTER Field _t_fps:Int Field _fps:Int Field _last_update:Int Method update() If MilliSecs() - _last_update < 1000 _t_fps :+ 1 Else _fps = _t_fps _t_fps = 0 _last_update = MilliSecs() EndIf End Method Method fps:Int() Return _fps End Method End Type |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
BladeRunnerModerator |
Di, März 08, 2005 13:54 Antworten mit Zitat |
|
---|---|---|
hmm. bewegen sich bei mir immer schön richtung Mitte des Schirms.
Allerdings gibt es sowohl mit resetcollisions als auch ohne "geschwindigkeitsschwankungen" bei den Bällen. Ohne Resetcollisions sind diese extremer, und nach einer Zeit geh die FPS runter. Mit bleibts gering schwankend stabil. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Dreamora |
Di, März 08, 2005 13:56 Antworten mit Zitat |
|
---|---|---|
Komisch ...
Warum bewegen sie sich dann bei mir nach dem Zufallsgenerator. Mit Reset gehts immerhin noch einigermassen in richtung der mitte. Aber ohne gehts von garnet bewegen bis irgendwohin wo sie grad lang wollen ... |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
BladeRunnerModerator |
Di, März 08, 2005 13:58 Antworten mit Zitat |
|
---|---|---|
Dann und wann hab ichs dass ein ball ganz geringe Kurskorrekturen vornimmt. aber keine nennenswerten abweichungen von der achse durch den mittelpunkt. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Dreamora |
Di, März 08, 2005 14:01 Antworten mit Zitat |
|
---|---|---|
Na dann kann ich ja jetzt schön auswürfeln worans liegt.
Einfachste Varianten: - Probleme mit ATI - Probleme von BM Math mit Pentium-M Auch wenns total keinen Sinn ergibt ... |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
BladeRunnerModerator |
Di, März 08, 2005 14:02 Antworten mit Zitat |
|
---|---|---|
Hab auch ne ATI drinne. befeuert mit Omegatreibern. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Dreamora |
Di, März 08, 2005 14:18 Antworten mit Zitat |
|
---|---|---|
OK immerhin einen Teil habe ich raus, der war "Dummheit" oder mangelndes Sprachdesign.
Ich bin davon ausgegangen, dass BM immerhin ein wenig "sinnvoll" arbeitet. Aber Field _tx,_ty,_force_x,_force_y:Float gibt nur für _force_y float anstatt für die ganze Zeile (bzw. jede Variable in der Zeile), sie es eigentlich schon ewig normal ist. Auch das andere hab ich geklärt ... war eigentlich logisch, hat aber in meiner verkorksten 1.04 BM Installation komischerweise ein anderes Resultat geliefert. Thread kann geröstet werden. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
- Zuletzt bearbeitet von Dreamora am Di, März 08, 2005 14:19, insgesamt einmal bearbeitet
BladeRunnerModerator |
Di, März 08, 2005 14:19 Antworten mit Zitat |
|
---|---|---|
und was war es nun ? | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Dreamora |
Di, März 08, 2005 16:23 Antworten mit Zitat |
|
---|---|---|
Was war was?
Eben, dass BM die Zeile wo am Schluss :Float steht nicht so versteht wie es sich gehört ... also das ALLE vom Type Float sein sollen. Es macht aus allen vorne Int und die letzte ist Float, womit natürlich massig rechen- bzw. rundungsfehler entstehen. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
DivineDominion |
Di, März 08, 2005 17:20 Antworten mit Zitat |
|
---|---|---|
Ich dachte nur noobs schieben die Schuld auf die Sprache, weil sies nicht können | ||
christian.tietze@gmail.com - https://christiantietze.de
macOS |
Dreamora |
Di, März 08, 2005 17:45 Antworten mit Zitat |
|
---|---|---|
Naja
Ich schiebe die Schuld nirgends hin. War halt ne Fehlannahme aufgrund der Tatsache, das BM von C, C++ und Pascal geklaut hat und die Sprachen das alle seit über einem Jahrzehnt können. Gibt halt viel blödsinniges Copy-Paste programmieren, kann man nix machen, wenn es Mark als C / C++ Programmierer net dämmert. Oder es is ein Windows Problem ... keine Ahnung. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Plasma(alt)Betreff: hmmm |
Di, März 08, 2005 17:51 Antworten mit Zitat |
|
---|---|---|
np | ||
DIV is dead ! |
TheShadowModerator |
Di, März 08, 2005 18:39 Antworten mit Zitat |
|
---|---|---|
LOL... am besten du schreibst jede variable in 1 zeile und dahinter den typ... | ||
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2 |
Übersicht BlitzMax, BlitzMax NG Allgemein
Powered by phpBB © 2001 - 2006, phpBB Group