Gloomy Nights and Living Dead (Re-Re-Release)

Spiele, Demos, Grafikzeug und anderes unterhaltendes.
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Beitrag von Lebostein »

Aber irgendwie hab ich einen Fehler drinnne. Bei einem Zoom von 5 steigt er mit einem Memory-Fehler aus... vielleicht kann ja mal jemand den Code überfliegen, steckt wohl irgendwo ein Denkfehler drin.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Bei mir geht jeder Faktor ohne Probleme. Du solltest aber die Zeile

Code: Alles auswählen

Sprite1Y = SpriteWidth(Sprite1N) 
in

Code: Alles auswählen

Sprite1Y = SpriteHeight(Sprite1N)
umschreiben damit man das auch für nicht ^2-Bilder nutzen kann.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Ich habs für mich noch mal ein bisschen angepasst, vielleicht geht es ja jetzt bei dir mit einem Faktor >= 5.

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
@Zeha:

Wenn du denkst das dein Thread okupiert wird sag Kareu bescheid, der schneidet das raus. :wink:
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Ich persönlich hab nix dagegen, aber vielleicht sollte das irgendwann in einen "Clean Pixel Development Thread" umgeschoben werden oder so :mrgreen: oder zur Wuro Game-Lib... oder... keine Ahnung.
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Beitrag von Lebostein »

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.
Komisch. Ab 5 meldet der Compiler bei mir einen Invalid Memory Access...

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...
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Lebostein hat geschrieben:Komisch. Ab 5 meldet der Compiler bei mir einen Invalid Memory Access...
Der Compiler? Dann melde es Fred und schick ihm deine Optionen mit. Der Compiler sollte nämlich nicht abstürzen.

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]
Falo hat geschrieben:Zeha es lohnt nicht da weiter zu frimmeln, ich glaube einfach es ist die zu schwache Grafikkarte (2,5 MB) :mrgreen:
2,5 MB - Es wird 2,5 mal gezeichnet - Gottseidank ist es keine 250 MB, dann würde es ja 250 mal gezeichnet werden. :mrgreen:
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.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Welche Version verwendest du den? PB 4.20 Final?
Windows 10 Pro, 64-Bit / Outtakes | Derek
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

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" ;)
das alleine hilft ja noch nichts... um ältere games wirklich laufen zu lassen,
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.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

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
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Beitrag von Lebostein »

Fluid Byte hat geschrieben:So geht es auch ohne Sprite3D und ist auf meinem (Arbeits-)Rechner nicht bemerkbar langsamer.
Ist natürlich clever :allright: Warum kompliziert, wenns auch einfach geht...
Antworten