Einfache Animation

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Einfache Animation

Beitrag von Green Snake »

Hallo

habe eine einfache frage, die ich gerne beantwortet haben möchte:

ich habe zb ein bild von einem raumschiff `(2D)

jetz will ich, das das raumschiff auf dem vollbildmodus von rechts nach links quasi animiert wird.
ausserdim, sollte es, wenn es über den rechten bildschirmrand
(ich verwende 1024*768)
snimiert wurde, dass dann das raumschiff auf der linken bildschirmseite wieder herauskommt, und die animation wiederholt wird, bis ich
ESCAPE drücke.
dabei sollte das raumschiff auf der linken seite in einer zufallshöhe sein
DH. einmal ist das Y villeicht 500, dann 150 usw


ich hoffe ihr könnt mir helfen


gruss atomkern
-.-"
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von zigapeda »

Hi

Der Code könnte vieleicht so aussehen

Code: Alles auswählen

InitSprite()
initKeyboard()
OpenScreen(1024,768,32,"Vollbild")
LoadSprite(0,"Pfad\Sprite.bmp",0)
Schiffy = Random(718)         ;768 - Spritehöhe
Schiffx = 1074                ;1024 + Spritebreite
Repeat
ExamineKeyboard()
ClearScreen(0,0,0)
If Schiffx < -50              ;SpriteBreite
  Schiffx = 1074              ;1024 + Spritebreite
  Schiffy = Random(718)       ;768 - Spritehöhe
Else
  Schiffx - 5                 ;Geschwindigkeit
EndIf
DisplayTransparentSprite(0,Schiffx,Schiffy)
FlipBuffers()
Until KeyboardPushed(#pb_key_escape)
musst hald ausprobieren. Ich weiß nicht ob das bei Version 3.3 Funktioniert.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

zur begriffsklärung

meinst du jetzt Bewegung oder Animation?

du schreibst zwar 'quasi animiert', aber eigentlich sprichst du von einer einfachen bewegung.

als animation bezeichnet man eher eine bewegung im sprite selber,
z.b. eine drehung des raumschiffs um die länsachse,
das wird normalerweise durch eine wechselweise darstellung
verschiedener sprites gelöst.

das prinzip der einfachen bewegung wirdst du immer brauchen.

der code von zigapeda ist da schon ein gutes beispiel.

es geht eben darum, für die spritekoordinaten variablen einzusetzen statt
absoluten zahlen, und diese variablen in den schleifendurchläufen zu verändern.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Anders Rum

Beitrag von Green Snake »

hallo

jetzt geht das bild ja von links nach rechts, was aber mus ich machen das es von rechts nach links geht?

habe schon diverse sachen probiert, jedoch ist das bild dann gar nicht mehr zu sehen
-.-"
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von zigapeda »

Oh Sry hab garnicht mitgedacht:

Code: Alles auswählen

InitSprite()
initKeyboard()
OpenScreen(1024,768,32,"Vollbild")
LoadSprite(0,"Pfad\Sprite.bmp",0)
Schiffy = Random(718)                   ;768 - Spritehöhe
Schiffx = -50                                  ;0 - Spritebreite
Repeat
ExamineKeyboard()
ClearScreen(0,0,0)
If Schiffx < 1074                              ;1024 + Spritebreite
  Schiffx = -50                                 ;0 -  Spritebreite
  Schiffy = Random(718)                  ;768 - Spritehöhe
Else
  Schiffx + 5                                   ;Geschwindigkeit
EndIf
DisplayTransparentSprite(0,Schiffx,Schiffy)
FlipBuffers()
Until KeyboardPushed(#pb_key_escape)
Du musst hald die Bewegungsrichtung, die Startposition und die Position wenn es über den Bildschirmrand hinausgeht ändern außerdem musst du den eingang der Auswahl ändern.
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag von nco2k »

anfänger hin oder her, dass ist simple mathematik... plus und minus. du könntest es wenigstens versuchen selber irgendwie zu machen.

Code: Alles auswählen

#ScrWidth = 1024
#ScrHeight = 768
#ScrDepth = 32

If InitSprite() = 0 Or InitKeyboard() = 0 Or OpenScreen(#ScrWidth, #ScrHeight, #ScrDepth, "") = 0 Or LoadSprite(0, "C:\test.bmp", 0) = 0
  End
EndIf

SprWidth = SpriteWidth(0)
SprHeight = SpriteHeight(0)

Repeat
  
  ClearScreen(0, 0, 0)
  
  If SprX = #ScrWidth + SprWidth
    SprX = 0 - SprWidth
    SprY = Random(#ScrHeight - SprHeight)
  Else
    SprX + 4
  EndIf
  
  DisplaySprite(0, SprX, SprY)
  
  FlipBuffers()
  
  ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape) : End
edit: arghs zigapeda jetzt hab ich so lang rumgetrödelt dass schon fast 10min. vergangen sind. :lol: das passiert wenn man nicht ganz so bei der sache ist und nebenher beschäftigt ist. ^^

c ya,
nco2k
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Green Snake hat geschrieben:jetzt geht das bild ja von links nach rechts, was aber mus ich machen das es von rechts nach links geht?

umgekehrt... oder....? :?

du musst dir erstmal grundsätzlich über das konzept von bildschirm-koordinaten klarwerden.

ausserdem solltest du verstehen, was ein screen ist.

leider ersehe ich aus deinen posts zwar, das du grundwissen benötigst,
aber ich kann nicht erkennen, was du schon weisst.

---------------------------------------------------------------------
nco2k hat geschrieben:anfänger hin oder her, dass ist simple mathematik... plus und minus. du könntest es wenigstens versuchen selber irgendwie zu machen.
Green Snake hat geschrieben:habe schon diverse sachen probiert, jedoch ist das bild dann gar nicht mehr zu sehen
er scheint es ja wohl mit + statt - ausprobiert zu haben, ohne allerdings
die startkoordinaten zu verändern.

ich denke, Green Snake braucht erstmal grundsätzliche erklärungen,
posten von unkommentierten codesnippets halte ich da für wenig sinnvoll.

@Green Snake:

beschreibe doch erstmal, was du schon weisst, und wie du dir die sache vorstellst,
damit ich weiss, was für infos du benötigst.

evtl. wäre ein chat hier auch angebrachter ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Rubiko
Beiträge: 943
Registriert: 25.02.2005 19:43
Computerausstattung: Intel i7 2600k
8GB Ram
GeForce GTX 560 Ti
Wohnort: Schwabach

Beitrag von Rubiko »

green snake:
also wie kaeru schon sagte, falls du überhaupt kein grundwissen hast schau dir mal das an

http://www.purebasic.de/files/PB_Tutorium1.exe

das beschäftigt sich mit vielen grundlagen und da werden auch 2 spiele gemacht, beim 1 z.B gehts auch um koordinaten

PS: der autor macht auch einen fehler und globalisiert jede variable was aber nur für strukturen notwendig ist

aber schlimmeres auch nicht

Rubiko
Ich wollte die Welt verändern, doch Gott gab mir nicht den Quelltext.
Antworten