Hi zusammen,
ich bin aktuell damit Beschäftigt eine beschleunigte Bewegung einer PictureBox zu realisieren. Mein Vorhaben besteht darin via Pfeiltasten die PictureBox zu bewegen. Das Ziel sollte darin bestehen, dass erstens die PictureBox beschleunigt bewegt wird d.h. wir eine Pfeiltaste länger betätigt, dann soll die Geschwindigkeit mit der sich die Box bewegt auch erhöht werden. Eein trivialer Ansatz wäre Position + Konstanter Wert, aber das hatte ich schon und soll durch die Beschleunigung ersetzt werden. Zweitens muss die PictureBox im Rahmen der Form bleiben, d.h. sie sollte sich nicht außerhalb des Formbereiches bewegen können.
Das hier ist mein aktueller Stand, hier fehlt noch die Bereichseingrenzung der Form. Das Problem ist, dass wenn ich zu stark beschleunige ich außerhalb des Formbereichs komme... Auch würde mich interessieren, ob diese beschleuinigte Bewegung noch verbessert werden könnte. Beispielsweise nutze ich für time nur eine Variable die hochzählt, vllt. geht das auch besser?! Ich bastle natürlich weiter, aber das ist der Stand den ich jetzt nach ein paar Minuten basteln habe:
ich bin aktuell damit Beschäftigt eine beschleunigte Bewegung einer PictureBox zu realisieren. Mein Vorhaben besteht darin via Pfeiltasten die PictureBox zu bewegen. Das Ziel sollte darin bestehen, dass erstens die PictureBox beschleunigt bewegt wird d.h. wir eine Pfeiltaste länger betätigt, dann soll die Geschwindigkeit mit der sich die Box bewegt auch erhöht werden. Eein trivialer Ansatz wäre Position + Konstanter Wert, aber das hatte ich schon und soll durch die Beschleunigung ersetzt werden. Zweitens muss die PictureBox im Rahmen der Form bleiben, d.h. sie sollte sich nicht außerhalb des Formbereiches bewegen können.
Das hier ist mein aktueller Stand, hier fehlt noch die Bereichseingrenzung der Form. Das Problem ist, dass wenn ich zu stark beschleunige ich außerhalb des Formbereichs komme... Auch würde mich interessieren, ob diese beschleuinigte Bewegung noch verbessert werden könnte. Beispielsweise nutze ich für time nur eine Variable die hochzählt, vllt. geht das auch besser?! Ich bastle natürlich weiter, aber das ist der Stand den ich jetzt nach ein paar Minuten basteln habe:
C#-Quellcode
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Diagnostics;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace MovePictureBox
- {
- public partial class Form1 : Form
- {
- public static double acceleration = 0.02;
- public static double velocity;
- public static double time = 0;
- public Form1()
- {
- InitializeComponent();
- }
- private void Form1_KeyDown(object sender, KeyEventArgs e)
- {
- time += 1;
- velocity += acceleration * time;
- Debug.WriteLine((int)(velocity));
- // Debug.WriteLine(e.KeyValue);
- if (e.KeyValue == 38)
- {
- if (moveAllowed())
- {
- pictureBox1.Location = new Point(pictureBox1.Location.X, pictureBox1.Location.Y - (int)(velocity * time + 1));
- }
- }
- if(e.KeyValue == 39)
- {
- if (moveAllowed())
- pictureBox1.Location = new Point(pictureBox1.Location.X + (int)(velocity * time + 1), pictureBox1.Location.Y);
- }
- if (e.KeyValue == 40)
- {
- if (moveAllowed())
- pictureBox1.Location = new Point(pictureBox1.Location.X, pictureBox1.Location.Y + (int)(velocity * time + 1));
- }
- if(e.KeyValue == 37)
- {
- if (moveAllowed())
- pictureBox1.Location = new Point(pictureBox1.Location.X - (int)(velocity * time + 1), pictureBox1.Location.Y);
- }
- }
- private void Form1_KeyUp(object sender, KeyEventArgs e)
- {
- time = 0;
- velocity = 0;
- }
- public bool moveAllowed()
- {
- int x = pictureBox1.Location.X;
- int y = pictureBox1.Location.Y;
- int height = this.Height;
- int width = this.Width;
- label1.Text = x + " " + y;
- label2.Text = height + " " + width;
- if(y < height && x < width && y > 0 && x > 0)
- {
- return true;
- }
- return false;
- }
- }
- }