Toon posts:

[C#] MouseMove

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik heb een picturebox waar een afbeelding in wordt weergegeven. Ik wil deze afbeelding kunnen laten bewegen door te bewegen met de muiscursor.

code:
1
2
3
4
5
void MainPic_MouseMove(object sender, MouseEventArgs e)
        {
            Game.Car.X = e.X;
            Game.Car.Y = e.Y;
        }


Nu blijft de afbeelding zeg maar aan de muiscursor plakken. Overal waar ik met de muis ben is ook de afbeelding. Maar er moet een vertraging inzitten. De afbeelding moet achter de cursor aankomen. Als ik linksboven met de cursor zit moet de afbeelding richting cursor komen, ga ik naar rechtsonder met de cursor dan beweegt de afbeelding richting rechtsonder. Iemand die me hiermee kan helpen?

Acties:
  • 0 Henk 'm!

Verwijderd

Wat je zou kunnen doen: elke muisbeweging (nieuwe coordinaten) opslaan in een soort "queue" (kan gewoon een array of list zijn bijvoorbeeld, weet niet zeker of C# een ingebouwd queue object kent).

Dan, wanneer die queue voor het eerst een bepaalde grootte (5, 10, 20, ... stappen) heeft gepasseerd pas je een variabele aan waardoor in je mouseMove methode het plaatje ook daadwerkelijk verplaatst.

Dus in code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
void MainPic_MouseMove(object sender, MouseEventArgs e)
        {
          slaMutatieOp(new Point(e.X, e.Y));
          //zet 'verplaatsen' op true wanneer de queue voor het eerst > x items is
          if(verplaatsen)
          {
                Point pos = haalOudsteMutatieOp();
                
                Game.Car.X = pos.X;
                Game.Car.Y = pos.Y;
          }
        }

Waarbij je slaMutatieOp en haalOudsteMutatieOp dus zelf moet implementeren, of hier een standaard (first in first out) queue-object en zijn methoden voor pakken.

Niet getest, maar je snap het idee waarschijnlijk wel :).

[ Voor 9% gewijzigd door Verwijderd op 06-11-2008 00:44 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Moeilijk doen als 't makkelijk kan. Je zet gewoon een timer met interval X en op elke interval beweeg je de afbeelding gewoon P pixels over X en P pixels over Y richting de muis.

code:
1
2
3
OnTimerElapsed
  MousePos = GetMousePos
  PicPos = GetDelta(PicPos, MousePos)
Zie hierboven ;) Maar we verwachten doorgaans wel wat meer eigen inzet. Ik zie nu niet wat je al geprobeerd hebt (behalve code die niet doet wat je wil) en wat je zelf al bedacht/gezocht/gevonden hebt. Op deze manier wordt je topic nogal vlug een quickfix en daar doen we uit principe hier niet aan:
Give a man a fish and feed him for a day; teach a man how to fish and feed him for a lifetime
;)

[ Voor 76% gewijzigd door RobIII op 06-11-2008 01:03 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 18-09 10:39
RobIII schreef op donderdag 06 november 2008 @ 01:00:
Give a man a fish and he has food for a day; teach him how to fish and you can get rid of him for the entire weekend.
;)

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


Acties:
  • 0 Henk 'm!

Verwijderd

Ik zat er inderdaad ook al aan te denken dat mijn voorgedragen oplossing wellicht iets te ingewikkeld was :+.

Het hang er ook maar net vanaf wat je wilt dat er gebeurt;
- moet het plaatje de exacte bewegingen van de muis volgen, maar op gepaste afstand (mijn oplossing)
- moet het plaatje ten alle tijden richting de muis bewegen, onafhankelijk van de positie van de muis (Rob's oplossing)