Objekte (z.B eine Person) auf Knopfdruck drehen

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Schnäggli92

Betreff: Objekte (z.B eine Person) auf Knopfdruck drehen

BeitragMi, Nov 21, 2007 16:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo alle. Ich bin noch ein ziemlicher Anfänge Embarassed und will gerne ein Spiel coden, das man so von oben sieht. Also wie aus der Luft also will ich mit den Pfeiltasten ein Männchen steuern. Pfeil oben vorwärts und nach unten ist kein Problem aber das sich das Männchen nach links dreht wenn ich den linken Pfeil drücke bring ich nicht hin. Evil or Very Mad Das Selbe geht auch mit rechts nicht.

Ich danke im Voraus für eure Hilfe

the FR3AK

BeitragMi, Nov 21, 2007 16:41
Antworten mit Zitat
Benutzer-Profile anzeigen
du musst die Images im vorraus drehen und in einem Dim-Array Speichern und dann für jeden Winkel das entsprechende Bild anzeigen.


mfg
 

AMD

BeitragMi, Nov 21, 2007 16:44
Antworten mit Zitat
Benutzer-Profile anzeigen
dazu gibts auch n Tutorial:

http://home.arcor.de/inpac/tut1.htm
...
Das Leben ist ein scheiß Spiel hat aber eine saugute Grafik!
PC:
AMD 5200 X2(2x2,6Ghz), 250GB Festplatte, 2048MB Arbeitsspeicher, Nvidia 9800 GTX mit 512MB.....
Bildschrim mit 22 Zoll und 5msk Übertragungszeit......
Mein BaumMap Tutorial:
http://www.blitzforum.de/forum...hp?t=26341

Schnäggli92

BeitragMi, Nov 21, 2007 17:16
Antworten mit Zitat
Benutzer-Profile anzeigen
ok danke ich schau mir das tut mal an

Schnäggli92

BeitragDo, Nov 22, 2007 22:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok das habe ich jetzt gemacht.

Code: [AUSKLAPPEN]
Graphics 800,600,32,1
SetBuffer BackBuffer()

Dim Auto(359)
TFormFilter 0

For winkel = 0 To 359
Auto(winkel) = LoadImage("C:\auto.bmp")
RotateImage Auto(winkel),winkel
MaskImage Auto(winkel),255,0,255
Next
Global x#,y#
Global geschwindigkeit#=1



While Not KeyHit(1)
Cls
If KeyDown(203) Then winkel= winkel -2
If KeyDown(205) Then winkel= winkel +2
If winkel > 359 Then winkel = 0
If winkel < 0 Then winkel = 359

If KeyDown (200) Then
x=x + Cos(winkel) * geschwindigkeit
y = y - Sin(winkel) * geschwindigkeit
EndIf

DrawImage auto(winkel),x,y
Flip
Wend
End


Jetzt will ich aber dass das Auto immer voraus fährt, also immer der Motorhaube nach. Bei mir fährt dass jetzt irgendwie komisch. Es fährt nicht gerade aus sondern irgendwohin nicht einem Punkt nach. Wie kann ich das jetzt machen?
Danke im Voraus
 

AMD

BeitragDo, Nov 22, 2007 23:05
Antworten mit Zitat
Benutzer-Profile anzeigen
hi

Code: [AUSKLAPPEN]
y = y - Sin(winkel) * geschwindigkeit


muss so heißen

Code: [AUSKLAPPEN]
y = y + Sin(winkel) * geschwindigkeit


jetzt dürfte es richtig gehn bei mir gehts so auch...

MfG
Das Leben ist ein scheiß Spiel hat aber eine saugute Grafik!
PC:
AMD 5200 X2(2x2,6Ghz), 250GB Festplatte, 2048MB Arbeitsspeicher, Nvidia 9800 GTX mit 512MB.....
Bildschrim mit 22 Zoll und 5msk Übertragungszeit......
Mein BaumMap Tutorial:
http://www.blitzforum.de/forum...hp?t=26341

Schnäggli92

BeitragDo, Nov 22, 2007 23:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke es geht jetzt auch.
Kann ich auch irgendwie die Mitte des Bildes als drehpunkt nehmen? also so dass es sich nicht um die linke obere Ecke dreht sonder in der Mitte des Autos? Ich binn noch ein ziemlicher noob. ^^ Embarassed Embarassed Embarassed

aMul

Sieger des Minimalist Compo 01/13

BeitragDo, Nov 22, 2007 23:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Probier es mal mit HandleImage() oder MidHandle().
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver
 

AMD

BeitragDo, Nov 22, 2007 23:31
Antworten mit Zitat
Benutzer-Profile anzeigen
schau dir dazu den befehl "Automidhandle" in der Online Hilfe an!

oder die Befehle die amul gepostet hat

MfG
Das Leben ist ein scheiß Spiel hat aber eine saugute Grafik!
PC:
AMD 5200 X2(2x2,6Ghz), 250GB Festplatte, 2048MB Arbeitsspeicher, Nvidia 9800 GTX mit 512MB.....
Bildschrim mit 22 Zoll und 5msk Übertragungszeit......
Mein BaumMap Tutorial:
http://www.blitzforum.de/forum...hp?t=26341

Schnäggli92

BeitragFr, Nov 23, 2007 19:29
Antworten mit Zitat
Benutzer-Profile anzeigen
ok danke ich hab das jetzt ma asuprobiert.

Code: [AUSKLAPPEN]
Graphics 800,600,32,1
SetBuffer BackBuffer()

Dim Auto(359)
TFormFilter 0

For winkel = 0 To 359

AutoMidHandle True
Auto(winkel)=LoadImage ("C:\auto.bmp")


MaskImage Auto(winkel),255,0,255
Next
Global x#,y#
Global geschwindigkeit#=1



While Not KeyHit(1)
Cls
If KeyDown(203) Then winkel= winkel -2
If KeyDown(205) Then winkel= winkel +2
If winkel > 359 Then winkel = 0
If winkel < 0 Then winkel = 359

If KeyDown (200) Then
x=x + Cos(winkel) * geschwindigkeit
y = y + Sin(winkel) * geschwindigkeit
EndIf

DrawImage auto(winkel),x,y
Flip
Wend
End


Jetzt dreht das Bild aber nicht mit also weis ich nicht wohin ich fahre. Kann man das auch irgendwie machen so dass das bild auch mitdreht?

Danke

Smily

BeitragFr, Nov 23, 2007 20:25
Antworten mit Zitat
Benutzer-Profile anzeigen
warum hast du das rotateimage rausgenommen?
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Schnäggli92

BeitragFr, Nov 23, 2007 22:41
Antworten mit Zitat
Benutzer-Profile anzeigen
och man ich bin schon blöd. Embarassed Embarassed hehe ja jetzt gez. Danke viel mal Very Happy Very Happy

Schnäggli92

BeitragSo, Nov 25, 2007 21:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich hab da mal was probiert. Ja es ist warscheinlich der grösste müll code den ihr je gesehen habt. Embarassed Embarassed Embarassed aber ich bin noch ein Anfänger und wollte wissen wieso immer Array index of bounds kommt??

Code: [AUSKLAPPEN]
Graphics 800,600,32,1
SetBuffer BackBuffer()

Dim Auto(359)
TFormFilter 0

For winkel = 0 To 359

AutoMidHandle True
Auto(winkel)=LoadImage ("C:\balken.bmp")


MaskImage Auto(winkel),255,0,255
Next
Global x#,y#
Global geschwindigkeit#=1


Global speed= 10

 

Global lv1 = LoadImage ("C:\mexico_shooter\Levels\Lv1.bmp")
Repeat
Cls

playermove()
DrawImage lv1,0,0
If ImagesCollide(Auto(winkel), x, y,frame1,lv1, 0, 0,frame2) Then
speed = 0.6
Else speed = 10
EndIf


Flip

Until KeyDown(1)


Function playermove()

If KeyDown(203) Then winkel= winkel -2
If KeyDown(205) Then winkel= winkel +2
If winkel > 359 Then winkel = 0
If winkel < 0 Then winkel = 359

If KeyDown (200) Then
x=x + Cos(winkel) * geschwindigkeit
y = y + Sin(winkel) * geschwindigkeit
EndIf

DrawImage Auto(winkel),x,y

End Function

Schnäggli92

BeitragSo, Nov 25, 2007 22:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich will eigentlich die ganze auto bewegung in eine funktion packen. Währe sehr nett wenn mir jemand helfen würde. Mr. Green

flona

BeitragSo, Nov 25, 2007 22:47
Antworten mit Zitat
Benutzer-Profile anzeigen
sry war ein totaler scheiß, hab es nur überflogen!
Einfach nicht beachten
www.Dreier-Florian.kilu.de
Intel Core 2 Quad Q9400 | Zotac 9800GT | 4GB RAM | 1TB HDD | Windows 7 Professional 32bit
  • Zuletzt bearbeitet von flona am So, Nov 25, 2007 22:51, insgesamt einmal bearbeitet

Schnäggli92

BeitragSo, Nov 25, 2007 22:50
Antworten mit Zitat
Benutzer-Profile anzeigen
aha ok np aber hast du eine lösung zu meine Problem?? ich wäre dir sehr dankbar. Very Happy Very Happy

Xeres

Moderator

BeitragSo, Nov 25, 2007 23:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Ja es ist warscheinlich der grösste müll code den ihr je gesehen habt.
Das stimmt nicht, hab schon einen (1!) schlimmeren hier gesehen Rolling Eyes
1. Was bezweckt deiner Meinung nach diese Schleife?
Code: [AUSKLAPPEN]
For winkel = 0 To 359

AutoMidHandle True
Auto(winkel)=LoadImage ("C:\balken.bmp")


MaskImage Auto(winkel),255,0,255
Next

Automidhandle gehört mit Sicherheit nicht in die Schleife, das sollte einem auf den ersten blick klar sein.
Du lädst 360 mal das gleiche Bild - 1x würde genügen.
Normalerweise wird das Codestück verwendet um ein Bild zu drehen, die beiden Leerzeilen wirken, als ob du das willkürlich gelöscht hast.

2. Da wird vermutlich das "Array index of bounds" kommen, weil nach der Schleife winkel=360 ist, und der Array nur bis 359 geht:
Code: [AUSKLAPPEN]
DrawImage Auto(winkel),x,y
Das hättest du mit dem benutzen des Debuggers auch Rückschließen können, wenigstens die genaue Zeile gibt der aus.
Rücke deinen Code ein, und zwar mit Tabs oder Leerzeichen wo du if...then, Schleifen usw. über mehrere Zeilen hast und Leerzeilen wo bestimmte Aktionen durchgeführt werden. Dann schreib dir einen Kommentar hin, was da genau passiert oder passieren soll.
Das Wichtigste ist: Lern, was die Befehle die du benutzt eigentlich bewirken - nach deinem Code gibt es da große Mängel.
Na denn, mach was draus.
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)

D2006

Administrator

BeitragMo, Nov 26, 2007 2:28
Antworten mit Zitat
Benutzer-Profile anzeigen

  • besser Image einmal laden und per ql:CopyImage kopieren, anstatt 360 mal zu laden
  • besser weniger Bilder mit größere Winkeldistanz. z.B. 72 Bilder aller 5°. Spart massig Speicherplatz und mehr ist eh unötig, weils kaum auffällt
  • besser keine Doppelposts (=2 Beiträge von einem Benutzer hintereinander) machen, sonst muss ich den Thread schliessen
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

Schnäggli92

BeitragMo, Nov 26, 2007 15:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ert ma sorry wegen dem sau code!! Embarassed Embarassed (ich bin ein Noob) also da mein code etwas anschaulicher.

Code: [AUSKLAPPEN]
Graphics 800,600,32,1
SetBuffer BackBuffer()


Global speed= 5
Global x = 50
Global y = 450
Global boden = LoadImage ("C:\mexico_shooter\Sonstiges\boden.jpg")
Global lv1 = LoadImage ("C:\mexico_shooter\Levels\Lv1.jpg") 

Dim player(359)
TFormFilter 0


AutoMidHandle True

For winkel = 0 To 359
   
   player(winkel) = LoadImage ("C:\balken.jpg")
   RotateImage player(winkel),winkel
   MaskImage player(winkel),255,0,255
Next



While Not KeyHit(1)
Cls 

If KeyDown(203) Then winkel= winkel -speed ; wenn linker pfeil dann dreht sich der player nach links
If KeyDown(205) Then winkel= winkel +speed ; wenn rechter pfeil dann dreht sich der player nach rechts
If winkel > 359 Then winkel = 0 ; wenn der winkel bei 359 angekommen ist dann soll er wieder auf 0
If winkel < 0 Then winkel = 359 ; wenn der winkel bei 0 ist dann soll er wieder auf 359

If KeyDown(200) Then ; Fortbewegung
   x=x + Cos(winkel) * speed
   y = y + Sin(winkel) * speed
EndIf


DrawImage boden,0,0
DrawImage lv1,0,0
DrawImage player(winkel),x,y

If ImagesCollide(player(winkel), x, y,frame1,lv1, 0, 0,frame2) Then ; wenn player und lv1 kollidieren dann speed = 0.6 sonst speed 10
   speed = 0.6
Else
   speed = 10
EndIf



Flip
Wend
End


Also so weit so gut. Jetzt gibt es aber immer einen schwarzen rahmen um meinen player. der manchmal kleiner und manchmal grösser wird. Wie kann ich den transparent machen?

Und wie kann ich machen das der player nicht durch die wände (also lv1 geht) ? Ich habs jetzt so gemacht dass er einfach stark abbremst wenn man in eine mauer fährt. Ich habs auch schon mal so gemacht dass wen es kollidiert der speed auf null geht, aber dann kann ich ja gar nicht mehr von der wand wegfahren. Gibt es da irgend ein befehl?? Also so dass man nicht durch die wand fahren kann? ich bin euch sehr dankbar.

und D2006 so wie meinst du dass mit den 5° ? ich hab so etwas versucht aber wenn ich einfach anstatt 359 72 nehme macht er die drehung nicht fertig und er macht immer noch 1° schritte. ich hab lange probiert 5° schritte hinzubekommen hab das gta-tut 1000 mal studiert bin aber nicht auf eine lösung gekommen. Kannst du das nochma erklären??

Ich danke für euer verständniss mit mir (noob) Embarassed Embarassed

flona

BeitragMo, Nov 26, 2007 18:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Schnäggli92 hat Folgendes geschrieben:
... und D2006 so wie meinst du dass mit den 5°?

Ich nehme an D2006 meint das so:
Code: [AUSKLAPPEN]
Dim player(71)
bild=LoadImage ("C:\balken.jpg")
For winkel = 0 To 71
   
   player(winkel) = CopyImage(bild)
   RotateImage player(winkel),winkel*5
   MaskImage player(winkel),255,0,255
Next
www.Dreier-Florian.kilu.de
Intel Core 2 Quad Q9400 | Zotac 9800GT | 4GB RAM | 1TB HDD | Windows 7 Professional 32bit

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group