WindowedScreen im ScrollAreaGadget
WindowedScreen im ScrollAreaGadget
Hallo an alle ^^,
ich hab mal ne Frage:
Ich versuche zur Zeit einen WindowedScreen in ein ScrollAreaGadget zu packen, aber immer wenn ich mit der Scrollbar etwas rübergehe kommt immer das alte Bild nach. Kann mir jm. Helfen ?
Mit freundlichen Grüßen,
Fusselohr
ich hab mal ne Frage:
Ich versuche zur Zeit einen WindowedScreen in ein ScrollAreaGadget zu packen, aber immer wenn ich mit der Scrollbar etwas rübergehe kommt immer das alte Bild nach. Kann mir jm. Helfen ?
Mit freundlichen Grüßen,
Fusselohr
- Green Snake
- Beiträge: 1394
- Registriert: 22.02.2005 19:08
muss es ein windowedscreen sein? oder reicht nicht vielleicht auch ein selbstbemaltest imagegadget. damit sollten kaum probleme auftreten.
Zuletzt geändert von bobobo am 16.06.2007 14:48, insgesamt 1-mal geändert.
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Das wäre aber sowieso Wahnsinn einfach mal das gesamte Level vorzuzeichnen und dann nur zu verschieben. Wenn du eh eine Tilemap hast, zeichne doch nur einen ausschnitt abhängig von der Position des Betrachters auf der Map. Das ist vollkommen trivial umzusetzen.
Sonst hast du ja schon bei winzigen Maps gigantischen Speicherverbrauch.
Sonst hast du ja schon bei winzigen Maps gigantischen Speicherverbrauch.
Schau mal hier:
http://www.purebasic.fr/german/viewtopi ... ht=folkisa
Ohne Scrolling.
http://www.purebasic.fr/german/viewtopi ... ht=folkisa
Ohne Scrolling.
Code: Alles auswählen
; Autor Folker Linstedt
; 2007|06|16
#MainWin=0
If OpenWindow(#MainWin, 0, 0, 200, 200, ":: FL :: Mapper", #PB_Window_SystemMenu|#PB_Window_ScreenCentered | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget) And CreateGadgetList(WindowID(#MainWin))
CreateImage(0,500,500)
StartDrawing(ImageOutput(0))
For i=0 To 23
Box(30+15*i,20*i,15,80,RGB(i*8,255-4*i,Random(255)))
Next
StopDrawing()
ScrollAreaGadget(0,0,0,200,200,500,500,20)
ImageGadget(1,0,0,500,500,ImageID(0))
Repeat
Event=WaitWindowEvent()
XX=WindowMouseX(#MainWin)-GadgetX(0)-GadgetX(1)+GetGadgetAttribute(0,#PB_ScrollArea_X )
YY=WindowMouseY(#MainWin)-GadgetY(0)-GadgetY(1)+GetGadgetAttribute(0,#PB_ScrollArea_Y )
If Event =#PB_Event_SizeWindow
ResizeGadget(0,#PB_Ignore,#PB_Ignore,WindowWidth(#MainWin),WindowHeight(#MainWin))
EndIf
SetWindowTitle(#MainWin,Str(XX)+" : "+Str(YY))
Until Event=16
EndIf
Kinder an die Macht http://scratch.mit.edu/
Und hier noch mal eine PB-Hilfe für den OpenWindowScreen etwas abgewandelt, um zu zeigen, wie eine Welt aussehen könnte.
Code: Alles auswählen
; Autor Folker Linstedt
; 2007|06|16
;/ PB-Hilfe
If InitSprite() = 0
MessageRequester("Error", "Can't open screen & sprite enviroment!", 0)
End
EndIf
;/ PB-Hilfe
If OpenWindow(0, 0, 0, 400, 400, "A screen in a window...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(0))
ButtonGadget(0, 350, 370, 45, 20, "Quit")
ScrollBarGadget(1, 10, 370, 200, 20, 0, 100, 10)
ScrollBarGadget(2, 370, 10, 20, 200, 0, 100, 10,#PB_ScrollBar_Vertical)
ButtonGadget(0, 350, 370, 45, 20, "Quit")
ButtonGadget(0, 350, 370, 45, 20, "Quit")
EndIf
If OpenWindowedScreen(WindowID(0), 0, 0, 320, 320, 0, 0, 0)
;/ Mein Teil
Dim Sprites(15,15)
For iy=0 To 15 ; die Sprites zu erstellen dauert etwas
For ix=0 To 15
Sprites(ix,iy)=16*iy+ix ; es können Sprites neu erstellt werden. Es müssen also nicht 400 verschiedene Sprites sein.
CreateSprite(Sprites(ix,iy),32,32)
StartDrawing(SpriteOutput(Sprites(ix,iy)))
Box(0,0,32,32,RGB(Random(255),Random(255),Random(255)))
StopDrawing()
Next
Next
Dim Welt(100,100)
For iy=0 To 100 ; die Sprites zu erstellen dauert etwas
For ix=0 To 100
Welt(ix,iy)=Random(255)
Next
Next
;/
Else
MessageRequester("Error", "Can't open windowed screen!", 0)
End
EndIf
EndIf
Repeat
Repeat
;Event = WindowEvent()
Event = WaitWindowEvent(50) ; 200 ist doch etwas zu langsam
Select Event
Case #PB_Event_Gadget
GadgetNr=EventGadget()
If GadgetNr = 0
End
EndIf
;/ Meins
If GadgetNr=1
xxx=GetGadgetState(1)
Debug xxx
EndIf
If GadgetNr=2
yyy=GetGadgetState(2)
Debug yyy
EndIf
;/
Case #PB_Event_CloseWindow
End
EndSelect
;/ Meins
If WindowMouseX(0)>-1 And WindowMouseX(0)<320 And WindowMouseY(0)>-1 And WindowMouseY(0)<320
SetWindowTitle(0,"X : "+Str(WindowMouseX(0)/32+GetGadgetState(1))+", Y: "+Str(WindowMouseY(0)/32+GetGadgetState(2)))
EndIf
;/
Until Event = 0
;/ Meins
;ClearScreen(RGB(0, 0, 0))
For iy=0 To 9
For ix=0 To 9
DisplaySprite(Welt(ix+xxx,iy+yyy),32*ix,32*iy)
Next
Next
;/
; Delay(1) ; Auf Anraten von ts-soft
FlipBuffers()
ForEver
Zuletzt geändert von Xaby am 17.06.2007 00:24, insgesamt 1-mal geändert.
Kinder an die Macht http://scratch.mit.edu/
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Wenn man jetzt Delay entfernt und WaitWindowEvent(200) benutzt, sinkt
die CPU Last von 80 - 100, auf 5 - 10 %, und ist dann IMHO tatsächlich
benutzbar. Es sei denn man mag kein Multitasking
die CPU Last von 80 - 100, auf 5 - 10 %, und ist dann IMHO tatsächlich
benutzbar. Es sei denn man mag kein Multitasking

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
