【发布时间】:2021-04-14 12:29:47
【问题描述】:
我正在尝试编写像this 这样的运动机制,但我该怎么做呢?如果我们按住Space键,游戏中的角色会像here一样移动。如果我们把手从钥匙上拿开,角色就会在重力的作用下倒下。我做了大约两个小时的研究,但这个网站是我最后的解决方法。
这是我的代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace c_sharp_form_test_2 {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {
bitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);
timer.Interval = 5;
timer.Tick += new EventHandler(FormUpdate);
timer.Start();
}
Timer timer = new Timer();
Bitmap bitmap;
Point center = new Point(100, 100);
int radius = 40;
int FigureSize = 10;
Point end;
float angle = -90;
float angVel = 0;
float angAcc = 0;
bool isPressing = false;
private void Form1_KeyDown(object sender, KeyEventArgs e) {
if (e.KeyCode == Keys.Space) {
isPressing = true;
angle += 10;
}
}
private void Form1_KeyUp(object sender, KeyEventArgs e) {
angVel = 0;
angAcc = 0;
isPressing = false;
}
private void FormUpdate(object sender, EventArgs e) {
end.X = (int)(radius * Math.Sin(angle / 57.2957795f)) + center.X;// from degrees to radians
end.Y = (int)(radius * Math.Cos(angle / 57.2957795f)) + center.Y;// from degrees to radians
Graphics g = Graphics.FromImage(bitmap);
Pen bp = new Pen(Color.Black);
SolidBrush b = new SolidBrush(Color.Black);
g.Clear(Color.White);
g.FillEllipse(b, end.X - FigureSize / 2, end.Y - FigureSize / 2, FigureSize, FigureSize);
g.DrawLine(bp, center.X, center.Y, end.X, end.Y);
pictureBox1.Image = bitmap;
if (!isPressing) {
angle += angVel;
angVel += angAcc;
angAcc = -0.15f * (float)Math.Sin(angle / 57.2957795f);
angVel *= 0.985f;//dampening
}
}
}
}
从现在开始感谢!
【问题讨论】:
标签: c# winforms timer picturebox