Movemouse

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

valera_rus

Betreff: Movemouse

BeitragMi, Mai 10, 2006 14:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo wieder einmal!

Code: [AUSKLAPPEN]

Graphics3D 1024,768
SetBuffer BackBuffer()

Collisions 1,2,2,2


camera=CreateCamera()
PositionEntity camera,0,-12,0
CameraRange camera,.1,200
EntityType camera,1


mesh=LoadMesh( "Tutorial Map.b3d" )
PositionEntity mesh,0,0,0
EntityFX mesh,1
EntityType mesh,2

   
While Not KeyHit (1)
MoveEntity camera,0,-0.1,0   
   If KeyDown(200) MoveEntity camera,0,0,0.07
   If KeyDown(208) MoveEntity camera,0,0,-0.07
   
   If KeyDown(203) TurnEntity camera,0,2,0
   If KeyDown(205) TurnEntity camera,0,-2,0
   
UpdateWorld
   RenderWorld
   Flip
Wend    
End

Ich hab schon unmengen an Sachen probiert wie ich mit der maus die Kamera steuern kann. Ich komme nie zu einem richtigen konzept!+
Hab auch schon in der OH nachgesehen doch dat hat auch nichts genützt!
Jez breuchte ich eure hilfe!

Lunatix

BeitragMi, Mai 10, 2006 15:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Guck dir mal

Code: [AUSKLAPPEN]
MouseXSpeed()

Code: [AUSKLAPPEN]
MouseYSpeed()

Code: [AUSKLAPPEN]
MoveMouse x#,y#



an

Arrow Damit Funktionierts Very Happy
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...

valera_rus

BeitragMi, Mai 10, 2006 16:04
Antworten mit Zitat
Benutzer-Profile anzeigen
JEZ:
Code: [AUSKLAPPEN]


Graphics3D 1024,768
SetBuffer BackBuffer()

Collisions 1,2,2,2


camera=CreateCamera()
PositionEntity camera,0,-12,0
CameraRange camera,.1,200
EntityType camera,1


mesh=LoadMesh( "Tutorial Map.b3d" )
PositionEntity mesh,0,0,0
EntityFX mesh,1
EntityType mesh,2

MouseXSpeed()
MouseYSpeed()


   
While Not KeyHit (1)
MoveEntity camera,0,-0.1,0


   MoveMouse x,y

   If KeyDown(200) MoveEntity camera,0,0,0.07
   If KeyDown(208) MoveEntity camera,0,0,-0.07
   
      

   
UpdateWorld
   RenderWorld
   Flip
Wend    
End

Aber die Maus hengt im rechten oberen eck und sie bewegt die kamera nicht

Christoph

BeitragMi, Mai 10, 2006 16:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst ja nicht einfach die Befehle irgendwo hinstellen. Das sind Funktionen, die
einen Wert zurückgeben,der dann verloren geht (zumindest bei dir)... Sad

KAPITEL 1:

1.1.1.1. Wert sichern:
Code: [AUSKLAPPEN]
X=mousexspeed():y=mouseyspeed()

Du hast jetzt den Wert in X,y gesichert,d.h. du weißt um wieviel Pixel sich die
Maus seit dem letzten Aufruf bewegt hat.

INFO: Die Befehle müssen in der Schleife stehen sonst wird
am Anfang nur einmal abgefragt und dann nicht mehr!!!


1.1.1.2.Wert nutzen:
Was bringt eine unbenutzte Variable???
Code: [AUSKLAPPEN]
turnentity Camera,Y,X,0


1.1.1.3. ACHTUNG MAUS
Irgendwann hängt die Maus an der rechten Seite des Bildschirms und man kann nicht
mehr weiter nach rechts schauen. Deshalb...
Code: [AUSKLAPPEN]
Movemouse GMX/2,GMY/2

...wird die Maus immer in die Mitte des Bildschirms gesetzt.(Glaub ich sollte mal nen Buch schreiben. Very Happy )

Habst du Kapitel 1.1.1.1-3 verstanden??? Very Happy Very Happy Very Happy

Thorsten

BeitragMi, Mai 10, 2006 17:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Mouse(X/Y)Speed() zeigt einen Positiven Wert bei Verschiebung nach rechts/unten und einen negativen Wert bei Verschiebung nach links/oben.

Wenn sich die Maus nicht mehr bewegt, springt der Wert wieder auf 0!

d.h.
es muss nicht

"X=mousexspeed():y=mouseyspeed()" heißen

sondern eher

"X=X + mousexspeed(): y=y +mouseyspeed()"

oder weil das etwas zu langsam ist sogar

X = X + (MouseXSpeed() * Faktor) : Y = Y + (MouseYSpeed() * Faktor)

(Klammern müssen nicht sein, werden aber trotzdem gesetzt Smile )
Je nachdem musst du die Variable Faktor dann anpassen (Global nicht vergessen! Wink )

wenn ich mich jetzt völlig irre dürft ihr mich schlagen xD

cya,
BlindGuy

valera_rus

BeitragMi, Mai 10, 2006 19:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Graphics3D 1024,768
SetBuffer BackBuffer()

Collisions 1,2,2,2


camera=CreateCamera()
PositionEntity camera,0,-12,0
CameraRange camera,.1,200
EntityType camera,1


mesh=LoadMesh( "Tutorial Map.b3d" )
PositionEntity mesh,0,0,0
EntityFX mesh,1
EntityType mesh,2



   
While Not KeyHit (1)

X=MouseXSpeed()
Y=MouseYSpeed()
TurnEntity Camera,Y,X,0
MoveMouse x,y
   

   If KeyDown(200) MoveEntity camera,0,0,0.07
   If KeyDown(208) MoveEntity camera,0,0,-0.07
   
   
   

   
UpdateWorld
   RenderWorld
   Flip
Wend    
End


Geht nur nach rechts und unten zu scrollen!
Und es stehrt vollkras am kopf

Thorsten

BeitragMi, Mai 10, 2006 19:06
Antworten mit Zitat
Benutzer-Profile anzeigen
hm...hab ich nichts gerade irgendwas gesagt??? Evil or Very Mad Twisted Evil

wieso baust du das nicht einfach in deinen code ein?

sirokuhl

BeitragMi, Mai 10, 2006 19:14
Antworten mit Zitat
Benutzer-Profile anzeigen
du musst mit movemouse die maus in die mitte des bildschirms setzen
und da du x und y dafür benutzt wird sie nie ganz in die mitte gesetzt, sonderen bleibt irgendwo oben links hängen
statt x und y nimm die koordinaten des bildschirmmittelpunktes, dann funkionierts

skey-z

BeitragMi, Mai 10, 2006 19:26
Antworten mit Zitat
Benutzer-Profile anzeigen
1. um die Maus in der Mitte des Bildschirms zu setzen musst du die Fenster Breite und Höhe in Variablen speichern und durch 2 teilen, an diese Koordinaten setzt du dann die maus

Code: [AUSKLAPPEN]

Breite = 800
Hoehe = 600
.
.
.
movemouse (Breite/2), (Hoehe/2)



2. Das die kamera irgenwo steht ist klar, besonders wenn du die Maus schnell bewegst

mache einfach folgendes:

Code: [AUSKLAPPEN]

X=MouseXSpeed()/1000
Y=MouseYSpeed()/1000


Falls es dir nun zu langsam seien sollte, setze den Faktor weiter nach unten, bis es dir gefällt

Ein Tipp, in der onlinehilfe stehen nicht nur die Befehle beschrieben, sondern es sind auch noch samples dazu im Unteren Bereich zu finden, einfach mal anschauen und ausführen, das hilft.

Solltest du es jetzt immer noch nicht verstanden haben, kann ich dir auch nicht mehr helfen.
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter
  • Zuletzt bearbeitet von skey-z am Mi, Mai 10, 2006 19:29, insgesamt einmal bearbeitet

Thorsten

BeitragMi, Mai 10, 2006 19:28
Antworten mit Zitat
Benutzer-Profile anzeigen
...nicht

ich kann nur noch das wiederholen was ich schon einmal gesagt habe:
Mouse(X/Y)Speed() ist KEINE Bildschirmposition sondern eine Variable die die Bewegung IN DEM MOMENT abfängt. Da wird dann nur 1,0 oder -1 ausgegeben!

sry, aber nochmal sag ich das nicht Mad

cya,
BlindGuy

EDIT:Nagut war doch nicht ganz richtig, es wird mehr als 1 oder weniger als -1 ausgegeben, ist aber im Prinzip egal!

valera_rus

BeitragDo, Mai 11, 2006 19:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht gehe ich wuch schon auf die nerven aber:
Code: [AUSKLAPPEN]

Graphics3D 1024,768
SetBuffer BackBuffer()

Collisions 1,2,2,2


camera=CreateCamera()
PositionEntity camera,0,-12,0
CameraRange camera,.1,200
EntityType camera,1


mesh=LoadMesh( "Tutorial Map.b3d" )
PositionEntity mesh,0,0,0
EntityFX mesh,1
EntityType mesh,2



   
While Not KeyHit (1)
MoveEntity camera,0,-0.1,0   
MoveMouse 512, 384
X=MouseXSpeed()/1000
Y=MouseYSpeed()/1000

   

   If KeyDown(200) MoveEntity camera,0,0,0.07
   If KeyDown(208) MoveEntity camera,0,0,-0.07
   MoveMouse x,y

   

   
UpdateWorld
   RenderWorld
   Flip
Wend    
End

Die maus is in der mitte aber wenn ich sie bewege is nichts! Die camera soll sich aber mitbewegen!
Danke!

skey-z

BeitragDo, Mai 11, 2006 19:37
Antworten mit Zitat
Benutzer-Profile anzeigen
ich habe mir deinen Code 2sek lang angeschaut und weiß woran es liegt, aber such selber mal danach, es sticht eigentlich sofort ins auge
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

Thorsten

BeitragDo, Mai 11, 2006 20:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Habt ihr mich irgendwie auf ignorieren geschaltet?? Rolling Eyes

so wird es nie funktionieren

valera_rus

BeitragDo, Mai 11, 2006 20:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich dachte mir hier wird einen geholfen!
AUF WIEDERSEHN!

Thorsten

BeitragDo, Mai 11, 2006 20:16
Antworten mit Zitat
Benutzer-Profile anzeigen
was solld er scheiß denn, wenn du keine ratschläge annimst, wirst du es eh nie schaffen Wink

valera_rus

BeitragDo, Mai 11, 2006 20:34
Antworten mit Zitat
Benutzer-Profile anzeigen
OK; JEZ HABE ICH ALLE FEHLER DIE ICH GEFUNDEN HABE AUFGEHOBEN UND MICH NACH DEINEN VOR$CHRIFTEN GEHALTEN!
Code: [AUSKLAPPEN]

Graphics3D 1024,768
SetBuffer BackBuffer()

Collisions 1,2,2,2


camera=CreateCamera()
PositionEntity camera,0,-12,0
CameraRange camera,.1,200
EntityType camera,1


mesh=LoadMesh( "Tutorial Map.b3d" )
PositionEntity mesh,0,0,0
EntityFX mesh,1
EntityType mesh,2



   
While Not KeyHit (1)
MoveEntity camera,0,-0.1,0   
X=MouseXSpeed()/1000
Y=MouseYSpeed()/1000

   

   If KeyDown(200) MoveEntity camera,0,0,0.07
   If KeyDown(208) MoveEntity camera,0,0,-0.07
   MoveMouse 512, 384


   

   
UpdateWorld
   RenderWorld
   Flip
Wend     
End

Die maus is in der mitte aber sie bewegt die Kamera nicht!

Thorsten

BeitragDo, Mai 11, 2006 20:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Geht es so vielleicht : Rolling Eyes

Code: [AUSKLAPPEN]

Graphics3D 1024,768
SetBuffer BackBuffer()

Collisions 1,2,2,2


camera=CreateCamera()
PositionEntity camera,0,-12,0
CameraRange camera,.1,200
EntityType camera,1


mesh=LoadMesh( "Tutorial Map.b3d" )
PositionEntity mesh,0,0,0
EntityFX mesh,1
EntityType mesh,2



   
While Not KeyHit (1)
MoveEntity camera,0,-0.1,0   
X=X + MouseXSpeed()
Y=Y + MouseYSpeed()

   

   If KeyDown(200) MoveEntity camera,0,0,0.07
   If KeyDown(208) MoveEntity camera,0,0,-0.07
   MoveMouse 512, 384


   

   
UpdateWorld
   RenderWorld
   Flip
Wend     
End

Willi die Rübe

BeitragDo, Mai 11, 2006 20:46
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Die Variablen X und Y müssen Float sein.
2. Muss man doch dann logischerweise auch die Kamera drehen mit ql:Turnentity oder bei BlindGuy mit ql:Rotateentity
3. ql:Movemouse ql:Graphicswidth()/2, ql:Graphicsheight/2 ist flexibler.
4. Für die Gravitation würde ich ql:TranslateEntity empfehlen, ist aber nocht so wichtig.

Greetz
  • Zuletzt bearbeitet von Willi die Rübe am Fr, Mai 12, 2006 14:43, insgesamt einmal bearbeitet

Lunatix

BeitragFr, Mai 12, 2006 14:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab mal ein kleines beispiel ausgekramt, so mach ichs immer (so ähmlich)

Code: [AUSKLAPPEN]

Graphics3D 800,600,32,2
SetBuffer BackBuffer ()


Global MXS#,MYS#,CamXSpeed#, CamYSpeed#, MouseSpeed#=.2, MouseInvert%=1
Global Cam,g_width%, g_height%,v_sync=1
Global SpeedX#,SpeedZ#

g_width = GraphicsWidth()
g_height = GraphicsHeight()

Cam = CreateCamera()
MoveEntity Cam,0,5,0

plane = CreatePlane()

box = CreateCube()
MoveEntity box,50,5,50

While Not KeyHit(1)

MXS = MouseXSpeed()
MYS = MouseYSpeed()

CamXspeed = CamXspeed + ((MYS*MouseSpeed#)*MouseInvert)
CamYSpeed = CamYSpeed - (MXS*MouseSpeed)

If KeyDown(17)
   Speedz# = Speedz + .5
   If Speedz > 2 Then Speedz = 2
Else If KeyDown(31)
   Speedz = Speedz - .5
   If Speedz < -1.5 Then Speedz = -1.5
Else
   Speedz = Speedz * .92
EndIf


MoveEntity Cam,SpeedX,0,SpeedZ
TurnEntity Cam,CamXSpeed,CamYSpeed,0
RotateEntity Cam,EntityPitch(Cam),EntityYaw(cam),0
MoveMouse g_width/2, g_height/2

CamXSpeed = CamXspeed * .6
CamYSpeed = CamYSpeed * .6

RenderWorld
Flip v_sync
Wend
End



vlt. Hilft das ja[/code]
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...

Christoph

BeitragFr, Mai 12, 2006 15:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok... ...hier meine Kommentare von oben nach unten...
@Blindguy
Ich gebe dir Recht... ...mousexspeed() und mouseyspeed() geben die
Pixelanzahl an, um die sich die Maus seit dem letzen Aufruf verschoben hat...
...aber... ...habe ich das nicht in meinem Beitrag erwähnt???
Noch einmal:
Code: [AUSKLAPPEN]
global Gmx=800,Gmy=600
graphics Gmx,Gmy,32,1
setbuffer backbuffer()

while Weis_was_ich_wie_lang_ihr_die_Schleife_haben_wollt!!!
  cls
  X=mousexspeed():y=mouseyspeed()
  turnentity Camera,Y,X,0
  Movemouse GMX/2,GMY/2
  ;Male_irgendwas
  flip
wend

Noch einmal... ...hier muss es nicht das heißen, was du in deinem
ersten Beitrag korrigiert hast, denn ich turne die Camera ja immer
um soviel wie sich die Maus bewegt hat und nicht um die Koordinate
der Maus.....
... außerdem setze ich die Maus in die Mitte, du setzst die Maus immer dort hin wo sie schon steht Rolling Eyes ...(d.h. du könntest diesen Befehl
auch ohne Probleme weglassen...). Ich setzte den Mauszeiger immer
in die Mitte nachdem ich abgefragt habe wieviel Pixel sich die Maus verschoben hat.....(Das was du gemacht hast hat zur Folge, dass man
nur nach unten und rechts scrollen kann...)
@sirokuhl
Dein Beitrag erwähnt noch einmal dass was in meinem stand... Wink
@skey-z
Vielleicht kams in meinem Beitrag nicht so ganz raus, aber genau das
hab ich auch gemacht...
Ausserdem darfst du den Wert bei Mousexspeed() und mouseyspeed() nicht
teilen sonst kommt immer null raus. (Selbst wenn man in einem
Durchlauf die Maus um 300Pixel verschiebt...300/1000 ist 0)
Du kannst auch X# und y# schreiben dann geht's.
Aber was bringt's? Wenn man es schafft die Maus um 300Pixel zu verschieben
bewegt sich die Kamera nur um 0.3°(300/1000=3/10=0.3).
D.h. du musst du Maus um 1200Pixel verschieben um eine volle Drehung zu
machen(360/0.3=1200) (das stengt an Very Happy )!!!
Dass wäre dann eher ein Sportspiel zum Mitmachen!!! Very Happy Very Happy Very Happy
@<Willi die Rübe>
1. Ist goldrichtig!!! Siehe in diesem Beitrag weiter oben!!!
2. Ist goldrichtig!!!
3. Ist silberrichtig!!! Tut mir leid, aber hier hab ich wieder was zu meckern...
Deine Alternative geht natürlich (deswegen hat sie ja auch den 2.Platz)
aber... ...Der PC muss immer wieder schauen wiegroß deine Grafikfläche
ist, das ist auf jedenfall langsamer!!!
Außerdem unlogisch:
Ich gebe dir einen Auftrag:
1. Aufgabe: Gebe mir die XGrafikfläche an!!!
2. Aufgabe: Gebe mir die YGrafikfläche an!!!
3. Aufgabe: Gebe mir die XGrafikfläche an!!!
4. Aufgabe: Gebe mir die YGrafikfläche an!!!
5. Aufgabe: Gebe mir die XGrafikfläche an!!!
6. Aufgabe: Gebe mir die YGrafikfläche an!!!
Was machst du:
1. Lösung: Du schaust in einer Quelle nach, wie groß X denn ist.
2. Lösung: Du schaust in einer Quelle nach, wie groß Y denn ist.
3. Lösung: Du weißst schon was X ist und kuckst gar nicht erst nach.
4. Lösung: Du weißst schon was Y ist und kuckst gar nicht erst nach.
5. Lösung: Du weißst schon was X ist und kuckst gar nicht erst nach.
6. Lösung: Du weißst schon was Y ist und kuckst gar nicht erst nach.

Auf deine Weise ist der PC gezwungen, immer wieder nachzusehen,
obwohl sich eh nichts ändert!!!
Auf meine Weise weiß der PC von anfang an, was X und Y ist.

4. Ist wieder goldrichtig!!!

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group