[Gelöst] Scale in Realtime

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Xawer23

Betreff: [Gelöst] Scale in Realtime

BeitragMo, Jan 04, 2010 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich habe eig. nur eine Frage:
ich will in einem 2D-JumpnRun spiel eine Art "Schockwellen-Waffe" einbauen, die sich kreisförmig ausbreitet.
nun habe ich als Test erst einmal nur das Bild erstellt und einen Testcode geschrieben, um die Geschwindigkeit zu testen.



dabei fällt die niedrige geschwindigkeit auf, und ich frage mich ob es einen anderen weg gibt.

Hier der Code, das Bild "Shockwave.png" ist einfach ein 1000x1000 pixel großer kreis mit schwarzer Maskenfarbe:

Code: [AUSKLAPPEN]

Graphics 1280,1024,16,0

SetBuffer BackBuffer()

;bild laden
shockwave = LoadImage("Shockwave.png")

;Bild wird verkleinert, weil die schockwelle klein anfängt und größer wird
ScaleImage shockwave,0.1,0.1

MidHandle shockwave



Repeat

Cls


; einzeichnen
DrawImage shockwave,640,512


Flip

; größe ändern
ScaleImage shockwave,1.1,1.1


Until KeyHit(1)

End




des weiteren fällt auf, dass das bild unscharf wird



Ich vermute mal, ich muss ein AnimImage nehmen, oder gibt es eine noch bessere Lösung?
  • Zuletzt bearbeitet von Xawer23 am Mo, Jan 04, 2010 17:34, insgesamt einmal bearbeitet

Eingeproggt

BeitragMo, Jan 04, 2010 15:24
Antworten mit Zitat
Benutzer-Profile anzeigen
wenns einfach nur n Kreis ist dann kannst du doch gleich Oval verwenden und die Größe in jedem Frame erhöhen.
Möchtest du n aufwendigeres Bild derart skalieren musst du wohl wirklich zu AnimImage greifen oder dir mit den Image Befehlen CopyImage, ScaleImage und nem Array selber die Bilder vorberechnen (beim Laden des Spiels).

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Midimaster

BeitragMo, Jan 04, 2010 15:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Schockwelle sieht besser aus, wenn das Bild im Original nur 100x100 groß ist. Teste es mal


Ich hatte da neulich einen Algo für Oval-Ringe (ungefüllt) entwickelt, der abhängig von der Größe zwischen 1-5 msec für das Zeichnen benötigt.

Außerdem könntest Du die Stufen-Bilder aus einem Ring-Bild bei Programmstart vorberechnen lassen und so das AnimImage erzeugen. Später dann immer unter 1msec

Gegen die Unschärfe hilft ein Antialiasing an den Rändern (anderer Alphawert als im "festen" Teil des Rings.)
  • Zuletzt bearbeitet von Midimaster am Mo, Jan 04, 2010 15:41, insgesamt einmal bearbeitet

Holzchopf

Meisterpacker

BeitragMo, Jan 04, 2010 15:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Falls du in Besitz von B3D bist, wäre der Einsatz der Lib Draw3D zu empfehlen, diese erlaubt nämlich Echtzeitskalierung, -rotation und sogar -transparenz.
Andernfalls bestünde unter Umständen sogar die Möglichkeit, mittels DrawImageRect eine eigene "Skalierungs"-Funktion zu schreiben, dazu gibt's bestimmt auch was im Codearchiv.

mfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

Xawer23

BeitragMo, Jan 04, 2010 17:33
Antworten mit Zitat
Benutzer-Profile anzeigen
also der ring isn natürlich mehr als nur ein Kreis, sonst würde Oval sinn machen.
Ich habe mich jetzt für ein AnimImage entschlossen, da auch ein Grafikeffekt ( verzerrung ) im Bild ist.
Draw3D habe ich mal versucht, aus dem forum/BBHilfe werd ich aber nicht schlau.
Könnt ihr mir da ein gutes Tutorial empfehlen?

Trotzdem Danke für die ratschläge Very Happy

TimBo

BeitragMo, Jan 04, 2010 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

das ganze ist eigentlich wie in 2D:

BlitzBasic: [AUSKLAPPEN]
Graphics3D 1024,768,32,2
SetBuffer BackBuffer()
Local timer=CreateTimer(60)
Local camera=CreateCamera()
Local light=CreateLight()

Include "Includes/Draw3D 3.2.bb"
DrawInit3D(camera)
Origin3D(1024,768)

LoadImage3D "Bildpfad",andere parameter


Hauptschleife
BlitzBasic: [AUSKLAPPEN]

Repeat

;3D Befehle u.A.
DrawImage3D BildHandle,x#,y#,button (1 oder 0), winkel#, skalierung#, frame
RenderWorld()

Flip(0):Cls
Until KeyHit(Btm_Beenden)


Zu beachten ist, dass standartmäßig (nicht zwingend) der Punkt 0:0 in der Mitte des Bildschirmes ist.
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.
  • Zuletzt bearbeitet von TimBo am Mo, Jan 04, 2010 18:42, insgesamt einmal bearbeitet

Tankbuster

BeitragMo, Jan 04, 2010 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Clear3D nicht vergessen Wink
Twitter
Download Jewel Snake!
Windows|Android

TimBo

BeitragMo, Jan 04, 2010 19:57
Antworten mit Zitat
Benutzer-Profile anzeigen
stimmt , dann kann man cls weglassen , man faile ich heute Embarassed
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group