God aften,
Jeg er i gang med at kode et simpelt program, hvor en objekt dropper ned fra toppen af designet og jeg skal "fange" det med et andet objekt, som jeg kan styre via "W, D, S og A"
Når jeg fanger objektet som dropper ned fra toppen, så skal jeg få et point, men lige pt. så tæller den point op, så længe den er i kollesion med det andet objekt.
Jeg kan ikke lure hvordan jeg få den til kun at tælle en op - en som kan hjælpe?
Min kode:
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 Animation
{
public partial class Form1 : Form
{
Point p1 = new Point();
Point p2 = new Point();
int bredde;
int højde;
int score;
public Form1()
{
InitializeComponent();
p1.X = pictureBox1.Location.X;
p1.Y = pictureBox1.Location.Y;
p2.X = pictureBox2.Location.X;
p2.Y = pictureBox2.Location.Y;
højde = ClientSize.Height;
bredde = ClientSize.Width;
}
Boolean max = true;
void kollesion()
{
if (pictureBox1.Bounds.IntersectsWith(pictureBox2.Bounds) && )
{
score++;
label1.Text = Convert.ToString(score);
max = true;
}
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.W && p1.Y > 0)
p1.Y -= 3;
if (e.KeyData == Keys.D && p1.X + pictureBox1.Width < bredde)
p1.X +=3;
if (e.KeyData == Keys.A && p1.X > 0)
p1.X -=3;
if (e.KeyData == Keys.S && p1.Y + pictureBox1.Height < højde)
p1.Y +=3;
pictureBox1.Location = p1;
if (e.KeyData == Keys.W && p2.Y > 0)
if (e.KeyData == Keys.D && p2.X + pictureBox2.Width < bredde)
if (e.KeyData == Keys.A && p2.X > 0)
if (e.KeyData == Keys.S && p2.Y + pictureBox2.Height < højde)
pictureBox2.Location = p2;
}
private void timer1_Tick(object sender, EventArgs e)
{
kollesion();
p2.Y +=5;
pictureBox2.Location = p2;
}
private void buttonStart_Click(object sender, EventArgs e)
{
timer1.Enabled = true;
}
private void buttonStop_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
}
}
}
Simpelt program med kollesion
Re: Simpelt program med kollesion
Kode: Vælg alt
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 Animation
{
public partial class Form1 : Form {
Point p1 = new Point();
Point p2 = new Point();
int bredde;
int højde;
int score;
public Form1() {
InitializeComponent();
p1.X = pictureBox1.Location.X;
p1.Y = pictureBox1.Location.Y;
p2.X = pictureBox2.Location.X;
p2.Y = pictureBox2.Location.Y;
højde = ClientSize.Height;
bredde = ClientSize.Width;
}
Boolean max = true;
void kollesion() {
if (pictureBox1.Bounds.IntersectsWith(pictureBox2.Bounds) && ) {
score++;
label1.Text = Convert.ToString(score);
max = true;
}
}
private void Form1_KeyDown(object sender, KeyEventArgs e) {
if (e.KeyData == Keys.W && p1.Y > 0)
p1.Y -= 3;
if (e.KeyData == Keys.D && p1.X + pictureBox1.Width < bredde)
p1.X +=3;
if (e.KeyData == Keys.A && p1.X > 0)
p1.X -=3;
if (e.KeyData == Keys.S && p1.Y + pictureBox1.Height < højde)
p1.Y +=3;
pictureBox1.Location = p1;
if (e.KeyData == Keys.W && p2.Y > 0)
if (e.KeyData == Keys.D && p2.X + pictureBox2.Width < bredde)
if (e.KeyData == Keys.A && p2.X > 0)
if (e.KeyData == Keys.S && p2.Y + pictureBox2.Height < højde)
pictureBox2.Location = p2;
}
private void timer1_Tick(object sender, EventArgs e) {
kollesion();
p2.Y +=5;
pictureBox2.Location = p2;
}
private void buttonStart_Click(object sender, EventArgs e) {
timer1.Enabled = true;
}
private void buttonStop_Click(object sender, EventArgs e) {
timer1.Enabled = false;
}
}
}
Re: Simpelt program med kollesion
Jeg kan desværre ikke teste det, da jeg ikke har resten af din kode, men prøv dette:
Idéen er at vi kun tæller scoren op, hvis vi i forrige tick ikke havde en kollision, og den information gemmer vi i variablen "collidedLastTick".
Kode: Vælg alt
private bool collidedLastTick = false;
void kollesion()
{
if (pictureBox1.Bounds.IntersectsWith(pictureBox2.Bounds))
{
if (!collidedLastTick)
{
collidedLastTick = true;
score++;
}
label1.Text = Convert.ToString(score);
max = true;
}
else
{
collidedLastTick = false;
}
}
-
- Begynder
- Indlæg:12
- Tilmeldt:27. okt 2017, 21:49
Re: Simpelt program med kollesion
Tak for svarerne, gutter
Jeg vil prøve at kigge på dem.
Jeg vil prøve at kigge på dem.