Simpelt program med kollesion

I dette forum kan du stille og svare på spørgsmål om C# programmering. Alle med en interesse for C# er velkommen!
Besvar
Bedemanden
Begynder
Indlæg:12
Tilmeldt:27. okt 2017, 21:49
Simpelt program med kollesion

Indlæg af Bedemanden » 15. nov 2017, 21:04

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;
}
}
}

cristian
Moderator
Moderator
Indlæg:882
Tilmeldt:26. sep 2011, 21:31
Kontakt:

Re: Simpelt program med kollesion

Indlæg af cristian » 16. nov 2017, 14:17

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;
		}
	}
}

jepperask
Geni
Geni
Indlæg:378
Tilmeldt:4. nov 2012, 17:57

Re: Simpelt program med kollesion

Indlæg af jepperask » 17. nov 2017, 18:46

Jeg kan desværre ikke teste det, da jeg ikke har resten af din kode, men prøv dette:

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;
    }
}
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".

Bedemanden
Begynder
Indlæg:12
Tilmeldt:27. okt 2017, 21:49

Re: Simpelt program med kollesion

Indlæg af Bedemanden » 19. nov 2017, 21:31

Tak for svarerne, gutter :)


Jeg vil prøve at kigge på dem.

Besvar