Bild unterschiedlich skalieren

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Schoasch

Betreff: Bild unterschiedlich skalieren

BeitragDo, Dez 11, 2008 19:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, ich will ein geladenes Bild (KS) mehrmals zeichnen jedoch soll jedes Bild anders skaliert sein.
Ich habe dies mit Types versucht und hier is der Code:



Code: [AUSKLAPPEN]
      If timerKS > 2 Then
               ss.Kondensstreifen = New Kondensstreifen
               ss\x = pl\x+28   
               ss\y = pl\y+28
               ss\scale = 0.9
               ss\scaled = 1
               ss\KSBild = Ks
         timerKS = 0
      EndIf

      For ss.Kondensstreifen = Each Kondensstreifen
         DrawImage ss\KSBild(KSInt),ss\x,ss\y
         If ss\scaled = 1 Then
            ScaleImage ss\KSBild,0.9,0.9
            ss\scaled = 2
         EndIf
      Next   




Leider wird aber beim skalieren jedes Bild nochmal skaliert obwohl dies ja immer nur Beim aktuellen Type sein sollte (ss.Kondensstreifen). Das geladene Bild heißt "Ks", deshalb auch ss\KSBild = Ks


Weis jemand wie ich dieses Problem lösen kann?
Ich will weder AnimImages machen, noch mehrere Bilder abspeichern.

Danke schon mal im Vorraus,
mfg,
Schoasch
 

Tigerkev

BeitragDo, Dez 11, 2008 19:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Es wird jedes skaliert weil
Code: [AUSKLAPPEN]
For ss.Kondensstreifen = Each Kondensstreifen
soviel bedeutet wie "für jeden kondensstreifen"
 

Schoasch

BeitragDo, Dez 11, 2008 19:49
Antworten mit Zitat
Benutzer-Profile anzeigen
danke für deine schnelle Antwort.
Dann müsste ich also jeden Type einzeln durchgehen aber wie mache ich das?

mfg
Schoasch
 

Tigerkev

BeitragDo, Dez 11, 2008 19:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn es für jeden neuen sein soll dann frag doch einfach jeden neuen ab

Schau mal hier Last

Oder muss man da After verwenden? weiß ich ejtzt garnicht.. Probieren geht über Studieren Very Happy
 

Schoasch

BeitragDo, Dez 11, 2008 20:14
Antworten mit Zitat
Benutzer-Profile anzeigen
es soll aber leider nicht nur für jeden letzten sein sondern ich will die bilder auch noch später verändern...

gibt es keine möglichkeit nicht jeden type einzeln anzusprechen wie z.B.
For ss.Kondensstreifen = First Kondensstreifen to Last kondensstreifen (geht leider nich lol)

bzw. wie wende ich last in einer for next schleife an?

mfg
Schoasch
 

Tigerkev

BeitragDo, Dez 11, 2008 20:29
Antworten mit Zitat
Benutzer-Profile anzeigen
nein nein, das last bedeutet soviel das (wie ich aus deinem code entnehmen kann), dass du nach jedem timer durchlauf einen neuen KS erstellst, das last ist dazu da das du den letzten (also den den du eben eingetragen hast) KS abfrägt.

also sozusagen :
Für jeden KS den du da erstellst skaliert er diesen

Der erste den du erstellst ist automatisch First dann kommt der nächste usw dann wäre first wenn nur einer da ist theoretisch last, der nächste (der 2.) dann wiederrum last.

Hoffe das ist verständlich Mad
Schon über 500 Threads durchwuselt und es werden immer mehr o_O'

Xeres

Moderator

BeitragDo, Dez 11, 2008 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Um alle Instanzen eines Types durchzugehen ist doch die For...Each Schleife da...
Dein Problem mit dem Bild ist, dass du es nur einmal geladen hast und dieses eine Bild ständig anders skalierst. CopyImage könnte Sinn machen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Schoasch

BeitragDo, Dez 11, 2008 20:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für eure Antworten.
Ich habe jetzt geschafft die Bilder mit Copy image zu scalieren hier der Code:

Code: [AUSKLAPPEN]

If timerKS > 1 Then
   ss.Kondensstreifen = New Kondensstreifen
      ss\x = pl\x+28   
      ss\y = pl\y+35
      ss\scale = 1.3
      ss\scaled = 1
      ss\KSBild = CopyImage(Ks)
      timerKS = 0
EndIf

For ss.Kondensstreifen = Each kondensstreifen
   If ss\scaled = 1 Then
      ScaleImage ss\KSBild,0.3,0.3
      ss\scaled = 2
   EndIf
ScaleImage ss\KSBild,1.1,1.1
DrawImage ss\KSBild,ss\x,ss\y
Next   




Ich kann jetzt jedes Bild auf 0.3 oder einen anderen Wert runterkopieren, jetzt mag ich dass sie langsam wieder hochskaliert werden mit ScaleImage ss\KSBild,1.1,1.1
Komischerweise tut er dies aber erst ab einem Wert von mindestens 1.3, und dann auf einmal sehr stark.

Kann mir einer sagen warum?

mfg
Schoasch

edit:

ich mache das ganze jetzt mit Sprites...
da ich davon aber leider nicht so viel ahnung hab hab ich schon meine nächste frage:

Wenn ich das sprite an der Position des Flugzeuges erstelle, wird das Sprite höher und weiter rechts erstellt als es sollte...

hier mal der code:

Code: [AUSKLAPPEN]


If timerKS > 1 Then
      ss.Kondensstreifen = New Kondensstreifen
            ss\x = pl\x   
            ss\y = pl\y
            ss\z = 300
            ss\scaled = 0.5
            ss\sprite = LoadSprite("gfx\menu\others\ks.png")
            PositionEntity ss\sprite,ss\x,ss\y,ss\z
         timerKS = 0      
EndIf


pl\x und pl\y sind die positionen des flugzeuges.

weis einer woran das liegt?

Danke schonmal im vorraus,
mfg
Schoasch

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group