probleme mit rotateimage[erledigt]

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

feuerball11

Betreff: probleme mit rotateimage[erledigt]

BeitragMo, Apr 06, 2009 15:05
Antworten mit Zitat
Benutzer-Profile anzeigen
wen ich das bild über rotateimage drehe(code am schluss) dan wird es komplett unscharf und dreht sich immer langsamer bis garnicht mehr....

also. was ist daran falsch::

Code: [AUSKLAPPEN]
If KeyDown(200)  Then
   x# = x# + Cos(winkel)
   y# = y# - Sin(winkel)
EndIf
If KeyDown(203) Then
   winkel = winkel +2
   If winkel > 360 Then winkel = winkel - 360
   If winkel < 0 Then winkel = winkel + 360
   RotateImage bild,2
EndIf
If KeyDown(205) Then
   winkel = winkel -2
   If winkel > 360 Then winkel = winkel - 360
   If winkel < 0 Then winkel = winkel + 360
   RotateImage bild,-2
EndIf
  • Zuletzt bearbeitet von feuerball11 am Mo, Apr 06, 2009 15:44, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragMo, Apr 06, 2009 15:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Das übliche Tformfilter Problem...
Die benötigten Zwischenschritte vor dem Hauptprogramm berechnen oder eine Userlib wie Draw3D verwenden um sich diesen zeitaufwändigen Prozess zu ersparen.
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)
  • Zuletzt bearbeitet von Xeres am Mo, Apr 06, 2009 15:08, insgesamt einmal bearbeitet

SpionAtom

BeitragMo, Apr 06, 2009 15:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Rotateimage ist nicht für Echtzeit zu gebrauchen, mach das vor deiner Spielschleife.

Und anstatt immer das vorherige Bild ein Grad weiterzudrehen ist es besser immer das Originalbild zu nehmen (0°), zu kopieren und das zu drehen(2°, 4°, 6°....).
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080
 

feuerball11

BeitragMo, Apr 06, 2009 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
schön und gut..... jetzt gehts zwar, aber das bild dreht sich irgendwie in eine falsche richtung....
also nochmal:
was ist daran falsch:
Code: [AUSKLAPPEN]
Graphics 400,400,0,2

;----grafik-----

Global bild = CreateImage(20,20)
SetBuffer ImageBuffer (bild)
   Rect 0,0,20,20
   Color 255,0,0
   Rect 0,0,20,5
   Color 255,255,255
SetBuffer BackBuffer()
MidHandle bild
Global bild2 = CopyImage (bild)
MidHandle bild2

;----globals-----

Global x# = 200
Global y# = 200
Global winkel = 90

;-----timer-----

timer = CreateTimer(60)

;----haupt-----

Repeat
Cls

update_player
draw_player

Flip
WaitTimer (timer)
Until KeyHit(1)


;-----functionen-----

Function draw_player()
   
   DrawImage bild2,x,y
   Text 10,10,lager
End Function



Function update_player()
If KeyDown(200)  Then
   x# = x# + Cos(winkel)
   y# = y# - Sin(winkel)
EndIf
If KeyDown(203) Then
   winkel = winkel +2
   If winkel > 360 Then winkel = winkel - 360
   If winkel < 0 Then winkel = winkel + 360
   bild2 = CopyImage (bild)
   RotateImage bild2,winkel
EndIf
If KeyDown(205) Then
   winkel = winkel -2
   If winkel > 360 Then winkel = winkel - 360
   If winkel < 0 Then winkel = winkel + 360
   bild2 = CopyImage (bild)
   RotateImage bild2,winkel
EndIf

End Function

ozzi789

BeitragMo, Apr 06, 2009 15:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Da Rotateimage sehr rechenaufwendig ist kannst du das ganze vorher drehen und jeden schritt, noch besser jeden 2ten (merkt man nicht und geht schneller) in einem Dim Feld speichern.

Dies ist zwar einigermassen schnell, aber bei mehrern Objekten usw wird es trotzdem langsam



Was Xeres mit Draw3D meinte, werde ich dir kurz Erklären
Du nimmst einen Würfel (oder ein Plane, nicht weiter wichtig) und maskierst ihn mit dem gewünschten bild, nun kannst du ihn in echzeit drehen (da es dank DirectX nur ein paar millisekunden braucht)
Da du den Würfel nur von oben siehst, denkst du es sei ein ganz normales Bild.
Das ganze kannst du natürlich selber einbauen (solang du B3D hast) oder die bequeme Version nehmen, also Draw3D.

Hoffe es ist verständlich Smile
mfg
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5
 

feuerball11

BeitragMo, Apr 06, 2009 15:24
Antworten mit Zitat
Benutzer-Profile anzeigen
es nutzt ja nicht jedes spiel draw 3d... also wie machen die das dann???

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Apr 06, 2009 15:26
Antworten mit Zitat
Benutzer-Profile anzeigen
So wie ozzi789 es in seinen ersten Satz erklärt hat.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

ozzi789

BeitragMo, Apr 06, 2009 15:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Graphics 400,400,0,2

;----grafik-----
TFormFilter 1

Global bild = CreateImage(20,20)
SetBuffer ImageBuffer (bild)
   Rect 0,0,20,20
   Color 255,0,0
   Rect 15,0,20,20
   Color 255,255,255
SetBuffer BackBuffer()
MidHandle bild
Global bild2 = CopyImage (bild)
MidHandle bild2

;----globals-----

Global x# = 200
Global y# = 200
Global winkel = 0

;-----timer-----

timer = CreateTimer(60)

;----haupt-----

Repeat
Cls

update_player
draw_player

Flip
WaitTimer (timer)
Until KeyHit(1)


;-----functionen-----

Function draw_player()
   
   DrawImage bild2,x,y
   Text 10,10,lager
End Function



Function update_player()
If KeyDown(200)  Then
   x# = x# + Cos(winkel)
   y# = y# + Sin(winkel)
EndIf
If KeyDown(203) Then
   winkel = winkel -2
   If winkel > 360 Then winkel = 1
   If winkel < 0 Then winkel = 360
   bild2 = CopyImage (bild)
   RotateImage bild2,winkel
EndIf
If KeyDown(205) Then
   winkel = winkel +2
   If winkel > 360 Then winkel = winkel - 360
   If winkel < 0 Then winkel = winkel + 360
   bild2 = CopyImage (bild)
   RotateImage bild2,winkel
EndIf

End Function


Eigentlich könntest du das ja selber machen Wink
Coden=Rumpröbeln Exclamation
Was ich geändert habe =>

TFormFilter 1

x# = x# + Cos(winkel)
y# = y# + Sin(winkel)

bei 203 - und bei 205 +



und was soll das??Code: [AUSKLAPPEN]

MidHandle bild
Global bild2 = CopyImage (bild)
MidHandle bild2

O_o
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5
 

feuerball11

BeitragMo, Apr 06, 2009 15:39
Antworten mit Zitat
Benutzer-Profile anzeigen
an ozi:
danke. ich glaube ich habe jetzt selber ne lösung...

und der code-teil stammt aus einem gröseren code...
da muss ich das ausversehen mit kopiert haben,.....

also meine lösung sieht jetzt so aus:

Code: [AUSKLAPPEN]
Graphics 400,400,0,2

;----grafik-----


Dim bild(179)
Global bildt = CreateImage(20,20)
SetBuffer ImageBuffer (bildt)
   Rect 0,0,20,20
   Color 255,0,0
   Rect 15,0,5,20
   Color 255,255,255
SetBuffer BackBuffer()
MidHandle bildt
For i = 0 To 179
bild(i) = CopyImage (bildt)
RotateImage bild(i),i*2
MidHandle bild(i)
Next

;----globals-----

Global x# = 200
Global y# = 200
Global winkel = 0

;-----timer-----

timer = CreateTimer(60)

;----haupt-----

Repeat
Cls

update_player
draw_player

Flip
WaitTimer (timer)
Until KeyHit(1)


;-----functionen-----

Function draw_player()
   
   DrawImage bild(winkel/2),x,y
End Function



Function update_player()
If KeyDown(200)  Then
   x# = x# + Cos(winkel)
   y# = y# + Sin(winkel)
EndIf
If KeyDown(203) Then
   winkel = winkel -2
   If winkel > 358 Then winkel = winkel - 358
   If winkel < 2 Then winkel = winkel + 358
EndIf
If KeyDown(205) Then
   winkel = winkel +2
   If winkel > 358 Then winkel = winkel - 358
   If winkel < 2 Then winkel = winkel + 358
EndIf

End Function

ozzi789

BeitragMo, Apr 06, 2009 15:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Schon besser, aber ich denke, 1 mal mid/auto handle sollte genug sein
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group