Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Zuckender Hintergrund

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Sippo



Anmeldungsdatum: 17.04.2008
Beiträge: 125

BeitragVerfasst am: 24.11.2008, 19:58    Titel: Zuckender Hintergrund Antworten mit Zitat

Hi,
also folgendes Problem:
Ich habe das unten stehende Programm mit 2 verschiedenen screens geschrieben um nicht den Hintergrud jedes maol von grund au neu laden zu lassen. Das ganze funzt auch schon recht gut, nur das Problem ist, dass an meinenm Leistungsschwächeren Notebook der Hintergrund zuckt.
Habe auch schon einiges versucht z.B. screelock und screenunlock sowie screensync. Nu fällt mir nichts mehr ein, da ja auch schon ein sleep 200 drin steht. Hat da einer nen Tipp für mich??

Achso nicht über das aussehen des Codes bescweren der ist ja immerhin nur ein Teil des Gesamten. Und das mit den Kommentaren... Naja, war zu faul und die Zeit ist eng. happy

Code:
cls
dim shared as integer breite,hoehe, bildx,bildy,kont
dim shared as string wahl, rbild
screeninfo breite,hoehe
screenres breite,hoehe,32,2,&H01
declare sub mainmenue
declare sub start
declare sub bewegen
declare sub waehlen
rbild = "1"
bildx = 700
bildy = 500
start
sub start
    screenset 0,1
    color &H009999
    ' Hindernis 1
    line (0,0)-(0,200)
    line (0,0)-(250,0)
    line (250,0)-(250,200)
    line (0,200)-(250,200)
    paint (150,150)
    ' Hindernis 2
    line (250,0)-(400,0)
    line (250,0)-(250,40)
    line (250,40)-(400,40)
    line (400,0)-(400,40)
    paint (300,10)
    ' Hindernis 3
    line (850,50)-(950,50)
    line (850,50)-(850,100)
    line (850,100)-(950,100)
    line (950,50)-(950,100)
    paint (900,75)
    ' Hindernis 5
    circle(500,330),100,,,,,F
    ' Hindernis 6
    line (400,500)-(700,500)
    line (700,500)-(700,600)
    line (700,600)-(400,600)
    line (400,600)-(400,500)
    paint (450,550)
    ' Hindernis 7
    line (900,450)-(900,550)
    line (900,550)-(1050,550)
    line (1050,550)-(1100,450)
    line (1100,450)-(900,450)
    paint (950,453)
    'Hindernis 9
    line (breite-20,hoehe-20)-(breite-20,hoehe-80)
    line (breite-20,hoehe-80)-(breite-80,hoehe-20)
    line (breite-80,hoehe-20)-(breite-20,hoehe-20)
    paint(breite-30,hoehe-30)
    'Hindernis 10
    line (breite-10,10)-(breite-60,10)
    line (breite-60,10)-(breite-10,60)
    line (breite-10,60)-(breite-10,10)
    paint(breite-30,30)
    'Hindernis
    line (10,hoehe-10)-(10,hoehe-60)
    line (10,hoehe-60)-(60,hoehe-10)
    line (60,hoehe-10)-(10,hoehe-10)
    paint(30,hoehe-30)
    ' Bande
    line (0,0)-(breite,0)
    line (0,20)-(breite,20)
    line (breite,0)-(breite,20)
    line (0,0)-(0,20)
    paint (500,5)

    line (0,0)-(0,hoehe)
    line (0,hoehe)-(20,hoehe)
    line (20,hoehe)-(20,0)
    line (20,0)-(0,0)
    paint (5,300)

    line (0,hoehe-20)-(breite,hoehe-20)
    line (breite,hoehe-20)-(breite,hoehe)
    line (breite,hoehe)-(0,hoehe)
    line (0,hoehe)-(0,hoehe-20)
    paint (50,hoehe-3)

    line (breite-20,0)-(breite,0)
    line (breite,0)-(breite,hoehe)
    line (breite,hoehe)-(breite-20,hoehe)
    line (breite-20,hoehe)-(breite-20,0)
    paint (breite-3,150)
    paint (-1,-1)
    Screenset 1,1
    screencopy 0,1 
    bewegen
end sub

sub bewegen
    do
    screenlock
    screencopy 0,1
    if rbild = "1" then
        if kont = 0 then
            if point (bildx+56,bildy+9) = &H009999 then
                rbild = "6"
                kont = 1
            end if
        end if
        if kont = 0 then
            if point (bildx+120,bildy+11) = &H009999 then
                rbild = "5"
                kont = 1
            end if
        end if
    end if
    if rbild = "2" then
        if kont = 0 then
            if point (bildx+23,bildy+53) = &H009999 then
                rbild = "8"
                kont = 1
            end if
        end if
        if kont = 0 then
            if point (bildx+21,bildy+117) = &H009999 then
                rbild = "5"
                kont = 1
            end if
        end if
    end if
    if rbild = "3" then
        if kont = 0 then
            if point (bildx+169,bildy+58) = &H009999 then
                rbild = "7"
                kont = 1
            end if
        end if
        if kont = 0 then
            if point (bildx+167,bildy+122) = &H009999 then
                rbild = "6"
                kont = 1
            end if
        end if
    end if
    if rbild = "4" then
        if kont = 0 then
            if point (bildx+53,bildy+154) = &H009999 then
                rbild = "7"
                kont = 1
            end if
        end if
        if kont = 0 then
            if point (bildx+117,bildy+156) = &H009999 then
                rbild = "8"
                kont = 1
            end if
        end if
    end if
    if rbild = "5" then
        if kont = 0 then
            if point (bildx+4,bildy+46) = &H009999 then
                rbild = "1"
                kont = 1
            end if
        end if
        if kont = 0 then
            if point (bildx+50,bildy+11) = &H009999 then
                rbild = "2"
                kont = 1
            end if
        end if
    end if
    if rbild = "6" then
        if kont = 0 then
            if point (bildx+131,bildy+5) = &H009999 then
                rbild = "3"
                kont = 1
            end if
        end if
        if kont = 0 then
            if point (bildx+166,bildy+47) = &H009999 then
                rbild = "1"
                kont = 1
            end if
        end if
    end if
    if rbild = "7" then
        if kont = 0 then
            if point (bildx+131,bildy+157) = &H009999 then
                rbild = "3"
                kont = 1
            end if
        end if
        if kont = 0 then
            if point (bildx+173,bildy+122) = &H009999 then
                rbild = "4"
                kont = 1
            end if
        end if
    end if
    if rbild = "8" then
        if kont = 0 then
            if point (bildx+24,bildy+121) = &H009999 then
                rbild = "4"
                kont = 1
            end if
        end if
        if kont = 0 then
            if point (bildx+59,bildy+163) = &H009999 then
                rbild = "2"
                kont = 1
            end if
        end if
    end if
    select case rbild
    case "1"
        bildx = bildx
        bildy = bildy-2
    case "2"
        bildx = bildx-2
        bildy = bildy
    case "3"
        bildx = bildx+2
        bildy = bildy
    case "4"
        bildx = bildx
        bildy = bildy +2
    case "5"
        bildx = bildx -1
        bildy = bildy -1
    case "6"
        bildx = bildx +1
        bildy = bildy -1
    case "7"
        bildx = bildx +1
        bildy = bildy +1
    case "8"
        bildx = bildx-1
        bildy = bildy+1
    case else
        Print "fehler"
    end select   
    Dim As String dateiname = "Roboter"+rbild+".bmp"
    Dim As Integer breit, hoch
    Dim As Integer ff = Freefile   
    Open dateiname For Input As #ff
    Get #ff, 19, breit             
    Get #ff, 23, hoch           
    Close #ff     
    Dim bild As Any Ptr     
    bild = ImageCreate(breit,hoch) 
    Bload dateiname, bild
    Put (bildx,bildy), bild
    If bild <> 0 Then ImageDestroy bild 
    if multikey(&H01) then end
    if multikey(&H1E) then
        bildx = 700
        bildy = 500
        rbild = "1"
        end if
    sleep 20
    screenunlock
    screensync
    cls
    kont = 0
    loop
end sub



edit: habe auch schon versucht die Bilder am anfang zu laden und dann nur noch einzusetzen und am Schluss wieder aus dem Speicher zu löschen ... hat nich gefunzt...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 24.11.2008, 20:18    Titel: Antworten mit Zitat

Wie zuckt es denn? Meinst du ein ruckeln?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sippo



Anmeldungsdatum: 17.04.2008
Beiträge: 125

BeitragVerfasst am: 24.11.2008, 20:27    Titel: Antworten mit Zitat

nein es ist wirklich eine Art zucken, denn der Hintergrund verschwindet immer wieder Kurz und Kommt dann wieder. Das sollte ja auch so sein allerdins sollte es halt so schnell sein, dass man es nicht mehr sieht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 24.11.2008, 23:25    Titel: Antworten mit Zitat

Hmm,
die Reihenfolge hier ist nicht gerade "ansichtsfreundlich"
Code:
...
    sleep 20     'zeige 20 ms das alte Bild
    screenunlock 'Bildspeicher freigeben
    screensync   'neues Bild anzeigen
    cls          'sofort wieder löschen
...
siehe Beispiel:
http://forum.qbasic.at/viewtopic.php?p=75715#75715
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sippo



Anmeldungsdatum: 17.04.2008
Beiträge: 125

BeitragVerfasst am: 25.11.2008, 17:58    Titel: Antworten mit Zitat

Thx für die Antwort, volta
ist mir auch aufgefallen und habe das mittlerweile auch abgeändert, nu bewegt sich allerdings der bewegliche Teil nicht mehr.... Bin dran, das wird schon.

Mfg
Sippo

Doch nich so einfach, ewie ich dachte... Hier mal mein Code kann mir jmd. helfen???

Bewegt sich nu doch weicht aber den Hindernissen net aus



EDIT2:
jetzt gehts!!!!!!!!!! habe einfach das zum Bild einfügen nochmal nach hinten verschoben hinter die Bedingungsabfrege. ich mach mal den Code raus, der is einfach zu lang, wer den trotzdenm will soll mich pls anschreiben.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 25.11.2008, 21:17    Titel: Antworten mit Zitat

Fürs nächste Mal: Längere Codes kannst du auch gern auf dem NoPaste-System des FreeBasic-Portals hochladen. zwinkern
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz