Problem mit verdeckten Sprites
Problem mit verdeckten Sprites
Hallo,
Ich habe einen Zeiger als Sprite, der durch die Maus gesteuert wird. Wenn ich mit dem Zeiger über ein Sprite bin und die Maustaste drücke, möchte ich dieses Sprite teilweise über ein anderes mit der Maus schieben.
z.B. es sind 2 (sollen aber einige mehr werden) Sprites auf dem Screen. Nun möchte ich, daß mal Sprite 1, Sprite 2 teilweise überdeckt und auch umgekehrt.
Im Klartext: Ein angeklicktes Sprite soll über ein anderes geschoben werden.
Bei mir klappt das immer nur in eine Richtung. Sprite 1 kann ich über Sprite 2 legen aber, 2 nicht ÜBER 1. Nummer 2 verschwindet dann immer unter 1.
Würde mich sehr auf Antwort freuen!
Gruß
Tina
Ich habe einen Zeiger als Sprite, der durch die Maus gesteuert wird. Wenn ich mit dem Zeiger über ein Sprite bin und die Maustaste drücke, möchte ich dieses Sprite teilweise über ein anderes mit der Maus schieben.
z.B. es sind 2 (sollen aber einige mehr werden) Sprites auf dem Screen. Nun möchte ich, daß mal Sprite 1, Sprite 2 teilweise überdeckt und auch umgekehrt.
Im Klartext: Ein angeklicktes Sprite soll über ein anderes geschoben werden.
Bei mir klappt das immer nur in eine Richtung. Sprite 1 kann ich über Sprite 2 legen aber, 2 nicht ÜBER 1. Nummer 2 verschwindet dann immer unter 1.
Würde mich sehr auf Antwort freuen!
Gruß
Tina
- Hroudtwolf
- Beiträge: 1416
- Registriert: 30.10.2004 23:33
- Kontaktdaten:
Es kommt auf die Reihenfolge deiner Spriteaufrufe an.
Beispiel:
Andere Reihenfolge
Du musst die Reihenfolge in deinem Programm anpassbar machen.
Beispiel:
Code: Alles auswählen
DisplaySprite (1,x,y)
DisplaySprite (2,x,y)
DisplaySprite (3,x,y)
DisplaySprite (4,x,y)
Code: Alles auswählen
DisplaySprite (2,x,y)
DisplaySprite (1,x,y)
DisplaySprite (4,x,y)
DisplaySprite (3,x,y)
Vielen Dank nur,
wie sieht das mit der Priorität denn aus? Wenn ich 100 Sprites dargestellt habe und will, das Nr. 90, Nr.80 teilweise abdecken soll und nicht darunter verschwindet? Kannst Du mir mal da ein Code-Schnipsel geben anhand von 2 Sprites, die ich abwechselnd verdecken kann?
Vielen Dank
Tina
wie sieht das mit der Priorität denn aus? Wenn ich 100 Sprites dargestellt habe und will, das Nr. 90, Nr.80 teilweise abdecken soll und nicht darunter verschwindet? Kannst Du mir mal da ein Code-Schnipsel geben anhand von 2 Sprites, die ich abwechselnd verdecken kann?
Vielen Dank
Tina
- Hroudtwolf
- Beiträge: 1416
- Registriert: 30.10.2004 23:33
- Kontaktdaten:
Habs jetzt nicht ausprobiert...Aber so muss es gehen.
Code: Alles auswählen
Structure Daten
Prioritaet
x
y
id
Endstructure
Dim SpriteLap.Daten(2)
If InitSprite() = 0 Or InitKeyboard() = 0
MessageRequester("Error", "Can't open DirectX 7 or later", 0)
End
EndIf
If OpenScreen(1024, 768, 16, "Fenster")
For x=1 to 2
SpriteLap(x)\id=loadSprite(#pb_Any,"DeinSprite"+str(x)+".bmp")
SpriteLap(x)\x=10+(x*2)
SpriteLap(x)\y=10+(x*2)
SpriteLap(x)\Prioritaet=x
next x
Repeat
FlipBuffers()
ClearScreen(0,0,0)
For x=1 to 2
If SpriteLap(x)\Prioritaet=x
DisplaySprite (SpriteLap(x)\ID,SpriteLap(x)\x,SpriteLap(x)\y)
endif
next x
ExamineKeyboard()
if Keyboardreleased (#PB_Key_Up)
For x=1 to 2
if SpriteLap(x)\Prioritaet=2
break
SpriteLap(x)\Prioritaet=1
if x=2:SpriteLap(1)\Prioritaet=2:endif
if x=1:SpriteLap(2)\Prioritaet=2:endif
endif
next x
endif
Until x > 500 Or KeyboardPushed(#PB_Key_Escape)
Else
MessageRequester("Error", "Can't open a 640*480 - 16 bit screen !", 0)
EndIf
CloseScreen()
End
Endif
Keine Demo, habe 3.92
Fehlermeldung Zeile 2: A variable in a "Structure" need a declared Type
Prioritaet ".b" ! ?
Vielleicht hast Du Dich gefragt, warum ich mehr als 100 Sprites brauche, ganz einfach, ich möchte mir meine Lieblings - Patience programmieren!
Nun, wenn ich dann eine Karte über eine ander ziehen will und die dann immer "darunter" und nicht "darüber" erscheint...
Ehrlich gesagt, benutze ich erst seit einer Woche "Purebasic" , davor nur ein bissel c++
Gibt es denn bei "Purebasic" kein einfachen Befehl, wenn ich ein Sprite anklicke, das dieses Sprite Priorität hat?
Tina
Fehlermeldung Zeile 2: A variable in a "Structure" need a declared Type
Prioritaet ".b" ! ?
Vielleicht hast Du Dich gefragt, warum ich mehr als 100 Sprites brauche, ganz einfach, ich möchte mir meine Lieblings - Patience programmieren!
Nun, wenn ich dann eine Karte über eine ander ziehen will und die dann immer "darunter" und nicht "darüber" erscheint...

Ehrlich gesagt, benutze ich erst seit einer Woche "Purebasic" , davor nur ein bissel c++
Gibt es denn bei "Purebasic" kein einfachen Befehl, wenn ich ein Sprite anklicke, das dieses Sprite Priorität hat?
Tina
- Hroudtwolf
- Beiträge: 1416
- Registriert: 30.10.2004 23:33
- Kontaktdaten:
Einfach austauschen !
Code: Alles auswählen
Structure Daten.l
Prioritaet.l
x.l
y.l
id.l
Endstructure
-
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Nei, also wenn dann schonHroudtwolf hat geschrieben:Einfach austauschen !
Code: Alles auswählen
Structure Daten.l Prioritaet.l x.l y.l id.l Endstructure
Code: Alles auswählen
Structure Daten
Prioritaet.l
x.l
y.l
id.l
Endstructure
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.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
@tina
also, mal konkret für dein broblem:
stelle für jeden stapel die karten der reihe nach von unten nach oben dar
(ich meine die abfolge der display-befehle)
und die momentan bewegte karte stellst du immer als letzte dar,
damit ist sie immer über allen anderen.
denke an folgendes:
die "sprites" bei DX sind keine sprites wie auf dem C64 oder anderen maschinen,
sie sind grafik-teile, die zu dem zeitpunkt, zu dem ihr 'display' kommt,
auf dem screen gemalt werden.
alles was danach kommt, liegt drüber, alles, was vorher kommt, kann überdeckt werden.
also, mal konkret für dein broblem:
stelle für jeden stapel die karten der reihe nach von unten nach oben dar
(ich meine die abfolge der display-befehle)
und die momentan bewegte karte stellst du immer als letzte dar,
damit ist sie immer über allen anderen.
denke an folgendes:
die "sprites" bei DX sind keine sprites wie auf dem C64 oder anderen maschinen,
sie sind grafik-teile, die zu dem zeitpunkt, zu dem ihr 'display' kommt,
auf dem screen gemalt werden.
alles was danach kommt, liegt drüber, alles, was vorher kommt, kann überdeckt werden.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.