Seite 1 von 1

meine Programme laufen nur langsam

Verfasst: 19.05.2011 18:50
von S.Wisser
Hallo,

Ich bin Programmier- Neuling, und habe folgendes Problem: Wenn ich ein (für mein Verständniss) einfaches Programm im
Openscreen-modus schreibe, und es kompiliere, dann läuft das programm erst wie vorhergesehen. Nach kurzer Zeit
läuft es dann allerdings sehr langsam und man kann den Maus Cursor kaum noch bis garnicht bewegen.

Meine Frage: Ist vielleicht ne blöde Frage, aber kann es sein das dass vielleicht an meinem Prozessor liegt? Ich habe
einen Celeron E3300 2X2,5 GHz Prozessor.

Habe wirklich nur sehr wenig bis gar keine ahnung vom programmieren.
Wie kann ich verhindern das mein Programm unterschiedlich schnell läuft?

Über Antworten und Anregungen würde ich mich sehr freuen.

Code: Alles auswählen

Global menu.b = 1
Global test.b = 0
Global exit.b = 0

Global sound_button.b = 0

Global Bild_x
Global Bild_y







If InitKeyboard() = 0
EndIf
If InitMouse() = 0
EndIf 
If InitSound() = 0
EndIf
If InitSprite() = 0
EndIf
If UsePNGImageDecoder() = 0
EndIf


Procedure menu()
ClearScreen(RGB(0,0,50))
ExamineKeyboard()
ExamineMouse()

mouse_x = MouseX()
mouse_y = MouseY()






If SpriteCollision(0,mouse_x,mouse_y,1,550,500)
DisplayTransparentSprite(2,550,500)
EndIf

DisplayTransparentSprite(1,550,500)

If SpriteCollision(0,mouse_x,mouse_y,1,550,500) And MouseButton(#PB_MouseButton_Left)
PlaySound(0)
test = 1
menu = 0
EndIf



If SpriteCollision(0,mouse_x,mouse_y,1,550,640)
DisplayTransparentSprite(2,550,640)
EndIf


DisplayTransparentSprite(1,550,640)

If SpriteCollision(0,mouse_x,mouse_y,1,550,640) And MouseButton(#PB_MouseButton_Left)
PlaySound(0)
menu = 0
exit = 1
EndIf

StartDrawing(ScreenOutput())
DrawingMode(1)
DrawText(610,515,"Play",RGB(0,0,0),RGB(255,255,255))
DrawText(610,655,"Exit",RGB(0,0,0),RGB(255,255,255))

StopDrawing()



DisplayTransparentSprite(0,mouse_x,mouse_y)

If KeyboardPushed(#PB_Key_Escape)
menu = 0
exit = 1
EndIf

FlipBuffers()
EndProcedure
Procedure test()
ClearScreen(RGB(50,50,220))
ExamineKeyboard()
ExamineMouse()

mouse_x = MouseX()
mouse_y = MouseY()

If mouse_x > 150 And mouse_x < 250
Bild_x = 1
EndIf


StartDrawing(ScreenOutput())
DrawingMode(1)
Box(150,50,1000,1000,RGB(250,30,50))
StopDrawing()


If SpriteCollision(0,mouse_x,mouse_y,1,550,800)
DisplayTransparentSprite(2,550,800)
EndIf

DisplayTransparentSprite(1,550,800)

If SpriteCollision(0,mouse_x,mouse_y,1,550,800) And MouseButton(#PB_MouseButton_Left)
PlaySound(0)
menu = 1
test = 0
EndIf

StartDrawing(ScreenOutput())
DrawingMode(1)
DrawText(610,615,"Bild_x" + Str (Bild_x),RGB(0,0,0),RGB(255,255,255))
DrawText(610,715,"Bild_y",RGB(0,0,0),RGB(255,255,255))
DrawText(610,815,"Zurück",RGB(0,0,0),RGB(255,255,255))
StopDrawing()



DisplayTransparentSprite(0,mouse_x,mouse_y)

If KeyboardPushed(#PB_Key_Escape)
test = 0
exit = 1
EndIf

FlipBuffers()
EndProcedure


OpenScreen(1280,1024,32,"xx")
LoadSprite(0,GetCurrentDirectory()+"graphics\main\cursor.png")
LoadSprite(1,GetCurrentDirectory()+"graphics\main\button.png")
LoadSprite(2,GetCurrentDirectory()+"graphics\main\button_layer.png")

TransparentSpriteColor(0,RGB(255,255,255))
TransparentSpriteColor(1,RGB(255,255,255))
TransparentSpriteColor(2,RGB(255,255,255))

LoadSound(0,GetCurrentDirectory()+"sounds\TIC.wav")


Repeat 

While menu = 1
menu()
Wend

While test = 1
test()
Wend




Until exit = 1


Re: meine Programme laufen nur langsam

Verfasst: 19.05.2011 18:56
von RSBasic
Kannst du bitte deinen Code posten, so dass wir dein Problem nachvollziehen können?

Re: meine Programme laufen nur langsam

Verfasst: 19.05.2011 20:55
von RSBasic
Es ist schön und gut, dass du deinen Beitrag editiert und deinen Code gepostet hast, aber der Code ist ohne deine Grafiken, die benötigt werden, nicht lauffähig und somit sinnfrei für andere User. Wenn du einen lauffähigen Beispielcode posten möchtest, der aber auf externe Ressourcen wie Grafiken und Sounds zugreift, dann musst du diese auch mitiefern.
Erstelle eine ZIP-/RAR-Datei und füge dort alle Dateien hinzu. Anschließend kannst du dein Archiv irgendwo hochladen, wie zum Beispiel: http://hosting.alexander-n.de

Aber was möchtest du eigentlich machen? Ein Hauptmenü mit Klick-Auswertung auf einen Grafikbutton?
Ich hab dir mal einen Beispielcode geschrieben:

Code: Alles auswählen

EnableExplicit

InitSprite()
InitMouse()
InitKeyboard()
InitSound()

Define mouse_x
Define mouse_y

If OpenScreen(1680,1050,32,"Screen")

  CreateSprite(0,5,5)
  CreateSprite(1,200,50)
  
  If StartDrawing(SpriteOutput(0))
    Box(0,0,5,5,RGB(255,0,0))
    
    StopDrawing()
  EndIf
  
  If StartDrawing(SpriteOutput(1))
    Box(0,0,200,50,RGB(0,255,0))
    
    StopDrawing()
  EndIf
  
  SetFrameRate(60)
  
  Repeat
    FlipBuffers()
    ClearScreen(RGB(0,0,50))
    
    DisplaySprite(1,200,150)
    
    ExamineKeyboard()
    ExamineMouse()
    
    mouse_x = MouseX()
    mouse_y = MouseY()
    
    If MouseButton(1)=1
      If mouse_x>=200 And mouse_x<=400 And mouse_y>=150 And mouse_y<=200
        End
      EndIf
    EndIf
    
    DisplaySprite(0,mouse_x,mouse_y)
    
    If KeyboardReleased(#PB_Key_Escape)
      End
    EndIf
    
  ForEver
EndIf

Re: meine Programme laufen nur langsam

Verfasst: 20.05.2011 16:30
von S.Wisser
ich möchte erstmal nur ein Menü programmieren welches ich später für kleine 2d spiele und ähnliches verwenden kann.

Ich hab die dazugehörigen Datein mit der pb Datei in einem ZIP- Ordner hochgeladen:

http://hosting.alexander-n.de/=NjA0LjEzMDU5MDEyNzM=

Die Datein bestehen eigentlich nur aus einem Button,Cursor und einem Klickgeräusch.


Genau sowas wie in Deinem Code möchte ich eigentlich machen, nur halt mit eigenen Grafiken und Geräuschen.

Re: meine Programme laufen nur langsam

Verfasst: 20.05.2011 17:19
von Regenduft
Warum plötzlich "alles langsam wird" ist mir ein Rätsel. Kann es sein dass Dein Virenscanner anspringt?
Bei mir meldet Avira, Dein Code wäre ein Dropper. :lol: Ansonsten funktioniert alles und der Code sieht OK aus (verwirrend aber OK :wink:).

Kleine Anfänger Tipps
  • Code einrücken!

    Code: Alles auswählen

    Procedure MachWas()
      If Code$ = "eingerückt"
        Print("Wow! Ist das übersichtilich! ;-)")
      EndIf
    EndProcedure
  • Startdrawing-Rückgabe prüfen!

    Code: Alles auswählen

    If StartDrawing(ScreenOutput())
      ; *mal-zeichen-kritzel*
      StopDrawing()
    EndIf
    
  • Das Anfängerbuch durcharbeiten:
    PureBasic - Eine Einführung in die Computer Programmierung
    Ist zwar offiziell noch "Beta", aber BI2 (das offizielle Arbeitstier des Boards :mrgreen:) hat bei der Übersetzung wirklich eine extrem gute Arbeit abgeliefert! (Kann man garnicht oft genug erwähnen!) Das Buch fängt wirklich bei Null an und ist schön locker flockig geschrieben.

Re: meine Programme laufen nur langsam

Verfasst: 20.05.2011 17:49
von S.Wisser
Vielen Dank für die Buchempfehlung, werds mich gleich mal reinlesen.

Ne, also an Antvir liegt es nicht. Ich hab mal ein kleines 2d ballerspiel gemacht ähnlich wie Moorhuhn, das wurde mit der Zeit auch immer langsam. Wenn ich nur einen leeren Bilschirm mit Mauscursor mache läuft alles noch, aber sobald ich in das Programm etwas mehr einfüge wirds langsam. Ich hab immer das Gefühl das es irgendwas mit der Taktrate des Prozessors zu tun hat. Leider hab ich zuwenig ahnung von diesen Dingen.

Re: meine Programme laufen nur langsam

Verfasst: 20.05.2011 19:03
von Regenduft
Achso, es handelt sich um einen anderen Code? :?

Mache Dich am besten mal mit dem Debugger vertraut und schau mal in den Library-Viewer, ob Du irgendwelche Grafiken zigfach lädst und nichtmehr freigibt.

Oder nutze mal den Profiler und kontrolliere wo Peaks (Spitzen/Maximalausschläge) sind und kontrolliere, ob diese Teile wirklich geplant oder durch ein Versehen so oft aufgeführt werden.

Falls Du's nicht bereits tutst, benutze "EnableExplicit". Vielleicht hast Du irgendwo einen Tippfehler.

Generell es ein gutes Vorgehen zu versuchen das Problem zu "isolieren". D.h. Den Code immer weiter zu reduzieren, bis Du sozusagen nur noch den fehlerhaften Code hast. Als Anfänger macht man da gerne den Fehler umgekehrt vorzugehen, d.h. den Code mit irgendwelchem "Testcode" so weit aufzublähen bis man garnichtsmehr versteht.

Manchmal kann es auch sinnvoll sein, einen "zusammengeschusterten" Teil einfach komplett zu löschen und neu zu schreiben, anstatt immer weiter daran "herumzudoktoren".