Gloomy Nights and Living Dead (Re-Re-Release)
- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
Bei mir geht jeder Faktor ohne Probleme. Du solltest aber die Zeile
in
umschreiben damit man das auch für nicht ^2-Bilder nutzen kann.
Code: Alles auswählen
Sprite1Y = SpriteWidth(Sprite1N)
Code: Alles auswählen
Sprite1Y = SpriteHeight(Sprite1N)
Windows 10 Pro, 64-Bit / Outtakes | Derek
- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
Ich habs für mich noch mal ein bisschen angepasst, vielleicht geht es ja jetzt bei dir mit einem Faktor >= 5.
@Zeha:
Wenn du denkst das dein Thread okupiert wird sag Kareu bescheid, der schneidet das raus.
Code: Alles auswählen
#SCR_WIDTH = 1024
#SCR_HEIGHT = 768
#SCR_DEPTH = 32
#SCR_BPPS = 4
InitSprite() : InitKeyboard()
#Fullscreen = 0
If #Fullscreen
OpenScreen(#SCR_WIDTH,#SCR_HEIGHT,#SCR_DEPTH,"CleanPixel")
Else
OpenWindow(0,0,0,#SCR_WIDTH,#SCR_HEIGHT,"CleanPixel",#PB_Window_SystemMenu | 1)
OpenWindowedScreen(WindowID(0),0,0,#SCR_WIDTH,#SCR_HEIGHT,0,0,0)
EndIf
Procedure LoadSpriteZoom(Sprite,Filename.s,Factor)
If Factor <= 1
LoadSprite(Sprite,Filename)
ProcedureReturn #True
EndIf
Protected hsprOriginal, Width, Height
Protected Buffer1, Buffer2, Length1, Length2
Protected X1, X2, Y1, Y2, RGBX
hsprOriginal = LoadSprite(#PB_Any,Filename)
Width = SpriteWidth(hsprOriginal)
Height = SpriteHeight(hsprOriginal)
CreateSprite(Sprite,Width * Factor,Height * Factor)
StartDrawing(SpriteOutput(hsprOriginal))
Buffer1 = DrawingBuffer()
Length1 = DrawingBufferPitch()
StopDrawing()
StartDrawing(SpriteOutput(Sprite))
Buffer2 = DrawingBuffer()
Length2 = DrawingBufferPitch()
StopDrawing()
For Y1 = 0 To Width - 1
For X1 = 0 To Height - 1
RGBX = PeekL(Buffer1 + (Y1 * Length1) + (X1 * #SCR_BPPS))
For Y2 = 0 To Factor - 1
For X2 = 0 To Factor - 1
PokeL(Buffer2 + (Y1 * Factor + Y2) * Length2 + (X1 * Factor + X2) * #SCR_BPPS,RGBX)
Next
Next
Next
Next
FreeSprite(hsprOriginal)
EndProcedure
For i=0 To 9
LoadSpriteZoom(i,#PB_Compiler_Home + "Examples\Sources\Data\Drive.bmp",i + 1)
Next
Repeat
If #Fullscreen = 0 : EventID = WindowEvent() : EndIf
ExamineKeyboard()
ClearScreen($FF5500)
For i=0 To 9
DisplaySprite(i,10 + OffsetX + i * 12,100)
OffsetX + SpriteWidth(i)
Next
OffsetX = 0
FlipBuffers(1)
Until KeyboardPushed(#PB_Key_Escape) Or EventID = #PB_Event_CloseWindow
Wenn du denkst das dein Thread okupiert wird sag Kareu bescheid, der schneidet das raus.

Windows 10 Pro, 64-Bit / Outtakes | Derek
Ich persönlich hab nix dagegen, aber vielleicht sollte das irgendwann in einen "Clean Pixel Development Thread" umgeschoben werden oder so
oder zur Wuro Game-Lib... oder... keine Ahnung.



ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Komisch. Ab 5 meldet der Compiler bei mir einen Invalid Memory Access...Fluid Byte hat geschrieben:Ich habs für mich noch mal ein bisschen angepasst, vielleicht geht es ja jetzt bei dir mit einem Faktor >= 5.
Eine Einschränkung bleibt weiterhin: Der Code geht nur für 32 Bit Farbtiefe, d.h. wenn 4 Byte pro Bildschirmpunkt gespeichert werden. Ansonsten müsste man einige Änderungen einbauen (prüfen des DrawingBufferPixelFormat, das Lesen und Schreiben per PeekL und PokeL müsste man anders gestalten usw.)
PS: Irgendwo steckt trotzdem noch der Wurm drin. Die Datei "Examples\Sources - Advanced\Waponez II\Data\Bullet_1.bmp" zum Beispiel lässt sich bei mir nur 2-mal vergrößern (dann der Fehler) und die Farben stimmen irgendwie auch nicht...
-
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Der Compiler? Dann melde es Fred und schick ihm deine Optionen mit. Der Compiler sollte nämlich nicht abstürzen.Lebostein hat geschrieben:Komisch. Ab 5 meldet der Compiler bei mir einen Invalid Memory Access...
Wenn es nur ein Denkfehler deinerseits war und es der Debugger ist der dir den Invalid Memory Access anzeigt, dann schick uns doch bitte noch die Zeilennummer und den funktionsfähigen Code (inkl. Bilder) in der er das tut.
[EDIT]
2,5 MB - Es wird 2,5 mal gezeichnet - Gottseidank ist es keine 250 MB, dann würde es ja 250 mal gezeichnet werden.Falo hat geschrieben:Zeha es lohnt nicht da weiter zu frimmeln, ich glaube einfach es ist die zu schwache Grafikkarte (2,5 MB)![]()

Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
das alleine hilft ja noch nichts... um ältere games wirklich laufen zu lassen,ZeHa hat geschrieben:Und ich finde auch nicht, daß "altes Zeug mit rumgeschleppt" wird, denn für eine Grafikkarte oder für einen Monitor wäre die Unterstützung von 320x240 sicherlich keine große "Last"
braucht die Maschine auch noch andere voraussetzungen.
viele laufen ja nur in der DOS-Box.
wenn man also wirklich öfters alte Games zocken will, sollte man halt nen Pentium100 oder Pentium2 mit DOS oder Win95 drauf in der Ecke stehen haben...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
So geht es auch ohne Sprite3D und ist auf meinem (Arbeits-)Rechner nicht bemerkbar langsamer.
Code: Alles auswählen
Procedure LoadSpriteZoom(Sprite,Filename.s,Factor)
Protected hbmSprite, Width, Height
hbmSprite = LoadImage(#PB_Any,Filename)
Width = ImageWidth(hbmSprite) * Factor
Height = ImageHeight(hbmSprite) * Factor
ResizeImage(hbmSprite,Width,Height,#PB_Image_Raw)
CreateSprite(Sprite,Width,Height)
StartDrawing(SpriteOutput(Sprite))
DrawImage(ImageID(hbmSprite),0,0)
StopDrawing()
FreeImage(hbmSprite)
EndProcedure
Windows 10 Pro, 64-Bit / Outtakes | Derek