Hallo zusammen,
ich versuche die Speicheradresse eines Sprites heraus zu finden.
Hätte da evtl. jamnd eine Idee für mich wie ich diese bekommen könnte?
ThanX und Gruß, PL.
Speicheradresse eines Sprites ermitteln.
- PureLust
- Beiträge: 1145
- Registriert: 21.07.2005 00:02
- Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
- Wohnort: am schönen Niederrhein
Speicheradresse eines Sprites ermitteln.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Die Struktur die man von CreateSprite(0[...] bekommt sieht so aus
Die Struktur ist von Stefan bzw seiner 'library descriptor'.
Ob und was sich da mit 4.0 geaendert hat weiss ich nicht.
Code: Alles auswählen
Structure PB_Sprite
*Sprite.IDirectDrawSurface7 ; DirectDrawSurface7 pointer
Width.w ; Current width of the sprite (could change if ClipSprite() is used)
Height.w ; Current height of the sprite (could change if ClipSprite() is used)
Depth.w ; depth of shade of the file. (in bits)
Mode.w ; Sprite mode, as described in LoadSprite()
FileName.l ; Pointer on the filename, if any
RealWidth.w ; Original width of the sprite when it was loaded
RealHeight.w ; Original height of the sprite when it was loaded
ClipX.w ; X offset if ClipSprite()
ClipY.w ; Y offset if ClipSprite()
EndStructure
Ob und was sich da mit 4.0 geaendert hat weiss ich nicht.
Code: Alles auswählen
InitSprite()
OpenScreen(800,600,32,"")
Structure PB_Sprite
*Sprite.IDirectDrawSurface7 ; DirectDrawSurface7 pointer
Width.w ; Current width of the sprite (could change if ClipSprite() is used)
Height.w ; Current height of the sprite (could change if ClipSprite() is used)
Depth.w ; depth of shade of the file. (in bits)
Mode.w ; Sprite mode, as described in LoadSprite()
FileName.l ; Pointer on the filename, if any
RealWidth.w ; Original width of the sprite when it was loaded
RealHeight.w ; Original height of the sprite when it was loaded
ClipX.w ; X offset if ClipSprite()
ClipY.w ; Y offset if ClipSprite()
EndStructure
*Sprite.PB_Sprite = CreateSprite(#PB_Any,100,100)
Debug *Sprite\Sprite
Debug *Sprite\Width
Debug "----"
CreateSprite(0,666,666)
*Sprite.PB_Sprite = IsSprite(0)
Debug *Sprite\Sprite
Debug *Sprite\Width
- PureLust
- Beiträge: 1145
- Registriert: 21.07.2005 00:02
- Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
- Wohnort: am schönen Niederrhein
Hallo edel,
vielen Dank für die Struktur - kann man immer gut gebrauchen.
In der Struktur konnte ich zwar nicht die Speicheradresse für das Sprite erkennen (hab ich die übersehen oder ist die nicht da drin?), aber ich habe wieder was gefunden, was ich schon mal benutzt hatte ("StartDrawing(SpriteOutput(x))" und dann "DrawingBuffer()").
Somit hat sich also mein Hauptproblem gelöst und dank Dir habe ich nun auch noch weitere interessante Infos zur Spritestruktur.
Also nochmals Big-ThanX.
vielen Dank für die Struktur - kann man immer gut gebrauchen.
In der Struktur konnte ich zwar nicht die Speicheradresse für das Sprite erkennen (hab ich die übersehen oder ist die nicht da drin?), aber ich habe wieder was gefunden, was ich schon mal benutzt hatte ("StartDrawing(SpriteOutput(x))" und dann "DrawingBuffer()").
Somit hat sich also mein Hauptproblem gelöst und dank Dir habe ich nun auch noch weitere interessante Infos zur Spritestruktur.

Also nochmals Big-ThanX.

[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
IDirectDrawSurface7
ist ein Interface, das man im Structure-Viewer ansehen kann.
doppelklick auf den Interface-Namen, dann offenbart er folgendes:
seh ich selbst zum ersten mal.
leider ist das 7er in der win32.hlp nicht beschrieben, da ist nur das erste und das 2er drin.
ich seh hier auf die schnelle auch keine methode, die den pointer zur grafik selber zurückliefert.
::GetAttachedSurface(a, b) selber ermöglicht anscheinend, eine Surface anzuhängen.
win32.hlp -> IDirectDrawSurface::GetAttachedSurface
auf jeden fall ist eine DD-Surface etwas wesentlich komplexeres als ein simpler grafik-speicherbereich.
OT
wenn ich sowas sehe, dann denke ich immer, wieviel ressourcen doch das OS verbrät für seinen ganzen objektkrempel,
und was man aus nem PC wohl rausholen könnte, wenn man ihn wirklich root-like programmieren würde.
man müsste bei nem game ein linux-kernel (deswegen linux, weil man davon den source bekommt) mitliefern,
und das game startet einfach per boot-CD. klar, die hardware-einstellungen wären ein bisschen ein problem,
weil ja heutzutage aller möglicher krempel verwendet werden kann und jeder müll andere treiber braucht....
aber die idee ist einfach reizvoll.
ist ein Interface, das man im Structure-Viewer ansehen kann.
doppelklick auf den Interface-Namen, dann offenbart er folgendes:
Code: Alles auswählen
Interface IDirectDrawSurface7
QueryInterface(a, b)
AddRef()
Release()
AddAttachedSurface(a)
AddOverlayDirtyRect(a)
Blt(a, b, c, d, e)
BltBatch(a, b, c)
BltFast(a, b, c, d, e)
DeleteAttachedSurface(a, b)
EnumAttachedSurfaces(a, b)
EnumOverlayZOrders(a, b, c)
Flip(a, b)
GetAttachedSurface(a, b)
GetBltStatus(a)
GetCaps(a)
GetClipper(a)
GetColorKey(a, b)
GetDC(a)
GetFlipStatus(a)
GetOverlayPosition(a, b)
GetPalette(a)
GetPixelFormat(a)
GetSurfaceDesc(a)
Initialize(a, b)
IsLost()
Lock(a, b, c, d)
ReleaseDC(a)
Restore()
SetClipper(a)
SetColorKey(a, b)
SetOverlayPosition(a, b)
SetPalette(a)
Unlock(a)
UpdateOverlay(a, b, c, d, e)
UpdateOverlayDisplay(a)
UpdateOverlayZOrder(a, b)
GetDDInterface(a)
PageLock(a)
PageUnlock(a)
SetSurfaceDesc(a, b)
SetPrivateData(a, b, c, d)
GetPrivateData(a, b, c)
FreePrivateData(a)
GetUniquenessValue(a)
ChangeUniquenessValue()
SetPriority(a)
GetPriority(a)
SetLOD(a)
GetLOD(a)
EndInterface
leider ist das 7er in der win32.hlp nicht beschrieben, da ist nur das erste und das 2er drin.
ich seh hier auf die schnelle auch keine methode, die den pointer zur grafik selber zurückliefert.
::GetAttachedSurface(a, b) selber ermöglicht anscheinend, eine Surface anzuhängen.
win32.hlp -> IDirectDrawSurface::GetAttachedSurface
auf jeden fall ist eine DD-Surface etwas wesentlich komplexeres als ein simpler grafik-speicherbereich.
OT
wenn ich sowas sehe, dann denke ich immer, wieviel ressourcen doch das OS verbrät für seinen ganzen objektkrempel,
und was man aus nem PC wohl rausholen könnte, wenn man ihn wirklich root-like programmieren würde.
man müsste bei nem game ein linux-kernel (deswegen linux, weil man davon den source bekommt) mitliefern,
und das game startet einfach per boot-CD. klar, die hardware-einstellungen wären ein bisschen ein problem,
weil ja heutzutage aller möglicher krempel verwendet werden kann und jeder müll andere treiber braucht....
aber die idee ist einfach reizvoll.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.