Memory Access Violation?
Übersicht

![]() |
s_m_wBetreff: Memory Access Violation? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
Ich bin noch relativ neu in sachen bb etc. und hab mich mal an was relativ primitiven versucht: Code: [AUSKLAPPEN] Global Grafik, Grafikani, frame, keyhits, x, y Graphics 640, 480, 16, 1 frame = 0 x = 300 y = 300 timer = CreateTimer(20) Grafik = LoadImage ("Test.bmp") Grafikani = LoadAnimImage ("Test.bmp", 20, 20, 0, 4) While KeyHit(1)=0 Cls Tasten() DrawImage Grafikani, x, y, frame Flip Wend Function Tasten() If KeyDown(205)=1 Then WaitTimer(timer) If frame < 3 Then frame = frame +1 Else frame = 0 End If x = x + 5 Return End If If KeyDown(203)=1 Then WaitTimer(timer) If frame > 0 Then frame = frame -1 Else frame = 3 End If x = x -5 Return End If If KeyDown(200)=1 Then WaitTimer(timer) If frame < 3 Then frame = frame +1 Else frame = 0 End If y = y - 5 Return End If If KeyDown(208)=1 Then WaitTimer(timer) If frame > 0 Then frame = frame -1 Else frame = 3 End If y = y + 5 Return End If End Function Das soll bewirken das ein männchen auf dem bildschirm angezeigt wird (was ich vorher alles getestet habe etc.) und gesteuert werden kann, dabei sollte man nicht mehrere pfeiltasten gleichzeitig drücken dürfen, dafür eben return, nur wenn ich das ausführe gibt das den error Code: [AUSKLAPPEN] Memory Access Violation
Weiß jemand was das bedeutet? P.S. Wenn ich die iffs aus der funktion in die hauptschleife packe, geht alles. [edit] bb syntax highlighting geht scheinbar nicht? |
||
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hast du mal den Debugger von BB angeschaltet? Dann wird dir eine genauere Fehlermeldung angezeigt.
Und wenn du hier Code pasten möchtest musst du den normalen "Code" Tag nehmen, der andere ist irgentwie kaputt ![]() |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
s_m_w |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das passiert bei dem "Waittimer" in einem der iffs sobald man eine taste drückt, hilft mir nicht sehrviel weiter ![]() |
||
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ahh, mir aber ![]() Der Timer der von dir erstellt wird, ist nicht als Globale definiert. Deshalb wird er in der Funktion nicht erkannt und es gibt einen MAV. |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
s_m_w |
![]() Antworten mit Zitat ![]() |
---|---|---|
also die variable timer als globale? mal gucken ob es geht
[edit] k geht alles und man kann nicht mehr schräg laufen ![]() |
||
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du etwas, das du im Hauptprogram definierst in einer Funktion benutzen möchtest ohne diese als Funktionsparameter zu übergeben, musst du sie schon als Globale definieren. Benutze aber am besten nur so wenig Globale wie möglich. Auch den Befehl Timer benutze ich z.B. eher garnicht, weil dadurch ja immer das ganze Program angehalten wird.
Das mit den Frames kann man auch anders lösen, definiere eine Zeit/Frame und arbeite mit Millisecs() und eigenen Berechnungen. (Z.b. die Zeit/Schleifendurchlauf ausrechnen [global] und dann für dein Bild eine Variable haben in der du z.B. DeineVariable = (DeineVariable+VergangeneZeit) Mod ZeitfürAnimation schreibst, und dann mit DeineVariable/ZeitfürAnimation*FramesInDerAnimation berechnest welches Frame gerade dran ist. |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
- Zuletzt bearbeitet von Firstdeathmaker am Di, Feb 14, 2006 15:21, insgesamt einmal bearbeitet
![]() |
s_m_w |
![]() Antworten mit Zitat ![]() |
---|---|---|
und wie bekomme ich dann die animation nicht so ganz schnell? Also so eher wie eine laufanimation wie man sie kennt und nicht so ein rumgefuchtel. | ||
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kleines Beispiel (Ich weis jetzt nicht ob es funktioniert, bin gerade in der Schule und kann es nicht testen):
Code: [AUSKLAPPEN] graphics 800,600 setbuffer backbuffer() global Time global TimeDiff type Player field Frametimer;Zeit field Image;Das Anim-Bild field Frames;Anzahl Frames im Bild field TimeForLoop;Zeit um alle Frames zu durchlaufen end type P.Player = new Player P\Image = Loadimage("Playerimage.png") P\Frames = KeineAhnung wie viele du da hast... P\TimeForLoop = 500 ;500 Millisecs pro durchlauf. ;Hauptschleife repeat TimeDiff = Millisecs()-Time Time = Millisecs() for P.Player = each Player P\Frametimer = (P\Frametimer + TimeDiff) mod P\TimeForLoop local frame = P\Frametimer*P\Frames/P\TimeForLoop drawanimimage P\Image,50,50,frame next until keyhit(1) end |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
s_m_w |
![]() Antworten mit Zitat ![]() |
---|---|---|
hm mir wird nicht so ganz klar was das machen soll, da es nicht funktioniert... Schade, sieht professionell aus | ||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich würde einfach eine Variable in jedem schleifendurchlauf inkrementieren und wenn die variable z.B. 20 ist dann wird das animationsbild gewechselt und die variable wieder auf 0 gesetzt. | ||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
s_m_w |
![]() Antworten mit Zitat ![]() |
---|---|---|
ja aber die animation soll ja nur beim laufen stattfinden und nicht so schnell wie die schleife sondern in soundsovielen sekunden | ||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ja dann machs per ql:millisecs() einfach
Code: [AUSKLAPPEN] while sonstewas if millisecs()-milli=>zeit in millisekunden zwischen den bildern then frame=frame+1 nächsterschritt=1 endif if nächsterschritt=1 then milli=millisecs() nächsterschritt=0 endif wend |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hab den Code nochmal jetzt zuhause überprüft und verbessert:
Code: [AUSKLAPPEN] Graphics 800,600
SetBuffer BackBuffer() Global Time Global TimeDiff Type Player Field Frametimer;Zeit Field Image;Das Anim-Bild Field Frames;Anzahl Frames im Bild Field TimeForLoop;Zeit um alle Frames zu durchlaufen End Type P.Player = New Player P\Image = LoadAnimImage ("Player.PNG", 40, 40, 0, 3) P\Frames = 3 P\TimeForLoop = 500 ;500 Millisecs pro durchlauf. ;Hauptschleife Repeat Cls TimeDiff = MilliSecs()-Time Time = MilliSecs() For P.Player = Each Player P\Frametimer = (P\Frametimer + TimeDiff) Mod P\TimeForLoop Local frame = Floor(Float(P\Frametimer*P\Frames)/P\TimeForLoop) Text 10,10,frame DrawImage P\Image,50,50,frame Next Flip Until KeyHit(1) End Benötigtes Bild (Rechtsklick->speichern unter...) |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
s_m_w |
![]() Antworten mit Zitat ![]() |
---|---|---|
schick, das hilft mir schon weiter, ein kleineres spiel (ohne sinn aber egal ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group