Schwarzer Bildschirm!

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Franky
Beiträge: 1132
Registriert: 29.08.2004 16:31
Wohnort: Münsterland
Kontaktdaten:

Beitrag von Franky »

@Janiboy:
Danke für die Blumen, wenn du aber anfängst alles nur zusammen zu fragen:


www.rentacoder.com


Gibt nämlich auch Leute, die besseres zu tun haben /:->
Falsch zugeordnetes Zitat des Tages: "O'zapft is" - Edward Snowden :)
Janiboy
Beiträge: 71
Registriert: 02.01.2005 15:22

Beitrag von Janiboy »

Zum Beispiel die folgende Frage konnte mir persönlich diese Hilfe nicht beantworten: Wie setzt man Einzelbilder so zusammen, dass sie einen Bewegungsablauf ergeben?
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

...
Aber die Grundlage für 2D Programme /:->

so was müsste eigentlich sehr schnell raus zu finden sein ... oder ein bischen logisches Denken, aber als Anfänger weis ich jetzt nicht, ob man da so einfach drauf kommt ...

Nun ja, die Frage ist ganz einfach zu Beantworten, wie du das machst, ist dann wohl ne andere Frage, aber das schafste schon.

Um einen Bewegungsablauf (Animation) zu erziehlen, muss man diese nur einfach nacheinander Anzeigen, das heißt erst das erste Bild, dann kurz dannach an deren Stelle das zweite Bild usw.

Code: Alles auswählen

For Num = 0 To 9 ;Laden der Sprites, 10 Sprites
  LoadSprite(Num, "Sprite"+Str(Num)+".bmp") ;Sprite0.bmp, Sprit1.bmp, usw. bis Sprite9.bmp
Next

Repeat
ClearScreen(0, 0, 0)
DisplaySprite(AniFrame, X, Y)
FlipBuffers()
Delay(200)
AniFrame + 1
If AniFrame => 9 : AniFrame = 0 : EndIf
Until KeyboardPushed(#PB_Key_Escape)
Der Code ist so zwar nicht lauffähig, aber er sollte zur verantschaulichung aussreichen :D (mal davon abgesehen das ich des eigentlich nicht machen wollte -_-), annsonsten versuch den mal zum Laufen zu bringen *gg*

Exemine- und Init-Befehle fehlen z.B. noch usw. ... :wink:

Ach ja ... und das Forum hat auch ne Suchfunktion, wenn man da richtige Suchbegriffe eingibt, dann findet man auch hin und wieder das passende :D

Ach ja ... und http://www.Purearea.net ist ein muss ... schau dich da mal um, vorallem im CodeArchive

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Janiboy
Beiträge: 71
Registriert: 02.01.2005 15:22

Beitrag von Janiboy »

So ein #*!% ! Dann benutz ich mal die Suchfunktion vom Forum und finde dann nix!!!
Also, beantwortet die frage wenn ihr wollt oder nicht: wie bekomm ich eine Animation hin?
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

Janiboy hat geschrieben:wie bekomm ich eine Animation hin?
Du machst mehrere Bilder/Frames in ein Bild rein und
benutzt dann ClipSprite um nur einen Teil darzustellen.

Alternativ kannst Du AnimSprites aus den PureTools
nehmen, siehe meine Signatur. Beispiele sind dabei.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Danilo hat geschrieben:Du machst mehrere Bilder/Frames in ein Bild rein und
benutzt dann ClipSprite um nur einen Teil darzustellen.
Was dir dabei klar sein muss: ClipSprite selbst stellt dein Sprite nicht dar. Erst die DisplaySprite funktionen zeigen den Ausschnitt des Sprites.
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.
Janiboy
Beiträge: 71
Registriert: 02.01.2005 15:22

Beitrag von Janiboy »

Oh mann! Die Archive von Purearea.de mögen ja gut sein, aber es lässt sich einfach nicht öffnen. Ist nicht jemand so "gnädig" sich die mühe zu machen den richtigen Befehl in meinen code einzusetzen. Da kommen einfach immer fehler!

Code: Alles auswählen

If InitSprite()=0    
EndIf 
If InitKeyboard()=0
EndIf
If InitSprite3D()=0
EndIf 
If InitMouse()=0
EndIf  

If OpenScreen(640, 480, 16, "Mein Spiel")=0 
EndIf 

For Num = 0 To 2
If LoadSprite(1, "Hamster1.bmp" ,0)=0 
If LoadSprite(2, "Hamster2.bmp" ,0)=0
If LoadSprite(3, "Hamster3.bmp" ,0)=0

 

Repeat 
  If IsScreenActive() 
  ClearScreen(0,0,0)
  DisplaySprite(AniFrame, X, Y)   
  FlipBuffers()
  Delay(200)
  AniFrame + 1
  If AniFrame => 3 : AniFrame = 0 : EndIf

   
   DisplayTransparentSprite(1, x, y)
  
   TransparentSpriteColor(1, 255, 255, 255) 
  

   
   ExamineKeyboard()  
  
   If KeyboardPushed(#PB_Key_Left)
     x-1
   EndIf 
  
   If KeyboardPushed(#PB_Key_Right)
     x+1
   EndIf 
    
   If KeyboardPushed(#PB_Key_F5)
     x+13
   EndIf
 
   If KeyboardPushed(#PB_Key_F6)
     y-13 
     x+13
   EndIf
   
   If KeyboardPushed(#PB_Key_F7)
     RotateSprite3D(1, 180, 0)
   EndIf   
  
 EndIf 
Until KeyboardPushed(#PB_KEY_ESCAPE)
[EDIT Danilo] Code-Tags gesetzt
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Lösch die Zeile

Code: Alles auswählen

For Num = 0 To 2 
Und Tausche das hier drunter mit den 3 Ladenzeilen aus deinem Code:

Code: Alles auswählen

If LoadSprite(0, "Hamster1.bmp" ,0)=0 
EndIf
If LoadSprite(1, "Hamster2.bmp" ,0)=0
EndIf
If LoadSprite(2, "Hamster3.bmp" ,0)=0
EndIf
Das hier komplet austauschen mit ...

Code: Alles auswählen

Repeat 
If IsScreenActive() 
ClearScreen(0,0,0) 
DisplaySprite(AniFrame, X, Y) 
FlipBuffers() 
Delay(200) 
AniFrame + 1 
If AniFrame => 3 : AniFrame = 0 : EndIf 


DisplayTransparentSprite(1, x, y) 

TransparentSpriteColor(1, 255, 255, 255) 



ExamineKeyboard() 

If KeyboardPushed(#PB_Key_Left)
x-1 
EndIf 

If KeyboardPushed(#PB_Key_Right) 
x+1 
EndIf 

If KeyboardPushed(#PB_Key_F5) 
x+13 
EndIf 

If KeyboardPushed(#PB_Key_F6) 
y-13 
x+13 
EndIf 

If KeyboardPushed(#PB_Key_F7) 
RotateSprite3D(1, 180, 0) 
EndIf 

EndIf 
Until KeyboardPushed(#PB_KEY_ESCAPE)
...dem:

Code: Alles auswählen

TransparentSpriteColor(0, 255, 255, 255) 
TransparentSpriteColor(1, 255, 255, 255) 
TransparentSpriteColor(2, 255, 255, 255) 

Repeat 
  If IsScreenActive() 
    ClearScreen(0,0,0) 
    DisplayTransparentSprite(AniFame, x, y) 
    FlipBuffers() 
    Delay(200) 
    AniFrame + 1 
    If AniFrame => 2 : AniFrame = 0 : EndIf 

    ExamineKeyboard() 

    If KeyboardPushed(#PB_Key_Left) 
      x-1
    EndIf
    If KeyboardPushed(#PB_Key_Right) 
      x+1 
    EndIf 
    If KeyboardPushed(#PB_Key_F5) 
      x+13 
    EndIf 
    If KeyboardPushed(#PB_Key_F6) 
      y-13 
      x+13 
    EndIf 
    If KeyboardPushed(#PB_Key_F7) 
      ;RotateSprite3D(1, 180, 0)  ; Was willst du hier mit einem Sprite-3D-Befehle? ... du hast überhaupt kein Sprite3D ... 
    EndIf 
  EndIf 
Until KeyboardPushed(#PB_KEY_ESCAPE)
MFG PMV
Zuletzt geändert von PMV am 02.01.2005 20:06, insgesamt 1-mal geändert.
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Janiboy
Beiträge: 71
Registriert: 02.01.2005 15:22

Beitrag von Janiboy »

Vielen dank für deine Hilfe (Auch wenns noch nicht so klappt)! Es ist mir etwas peinlich, aber ich bin eben neu: Wie bekommt man das hin, dass irgend eine farbe die man nie braucht zB türkis transparent wird?
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Ups -_- mir is grad aufgefallen das ...

Code: Alles auswählen

DisplayTransparentSprite(1, x, y)
falsch ist ... es müsste heißen

Code: Alles auswählen

DisplayTransparentSprite(AniFame, x, y) 
sorry
^^^habs auch grad noch schnell im Post drüber korigiert :D

Und jetzt zu deiner weiteren Frage.
TransparentSpriteColor() setzt die angegebene Farbe für ein paar Display-Befehle auf Transparent (z.B. DisplayTransparentSprite())
Das heißt du kannst damit immer nur pro Sprite 1 Farbe als Transparent definieren.
Willst du also eine bestimme Farbe als Transparent definieren, musst nur schauen, welche Farbwerte diese Farbe besitzt und diese dann mit TransparentSpriteColor() setzten.
die Farbwerte Rot = 255, Grün = 255, Blau = 255 ergeben Weiß.
Um also diese Farbe wie oben als Transparent zu definieren muss der Befehle TransparentSpriteColor(#Sprite, 255, 255, 255) aufgerufen werden. Wobei #Sprite jetzt für ein Sprite steht, welches vorher mit LoadSprite() erfolgreich geladen wurde.

Dafür gibs Tools, mit welchen du herrausfinden kannst als Anfänger, welche Farbwerte welche Farbe hat. Der Standart-PB-Editor müsst das sogar auch haben. Schau mal im Menü unter "Tools".

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Antworten