如何在发生碰撞时阻止我的玩家向一个方向移动

时间:2015-08-10 02:43:58

标签: c#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Game1
{
    public partial class Form1 : Form
    {
        Graphics g;
        Rectangle Player;
        Rectangle Enemy;
        Boolean left;
        Boolean right;
        Boolean up;
        Boolean down;

        int Playerx, Playery, Playerw, Playerh;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Playerx = 0;
            Playery = 0;
            Playerw = 32;
            Playerh = 32;
        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            g = e.Graphics;
            //Draw Player
            Player = new Rectangle(Playerx, Playery, Playerw, Playerh);
            g.FillRectangle(Brushes.Blue, Player);

            //Draw Enemy
            Enemy = new Rectangle(100, 100, 32, 32);
            g.FillRectangle(Brushes.Red, Enemy);

            if (Player.IntersectsWith(Enemy.Left))
            {
                left = false;
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (left == true)
            {
                Playerx -= 5;
            }

            if (right == true)
            {
                Playerx += 5;
            }

            if (up == true)
            {
                Playery -= 5;
            }

            if (down == true)
            {
                Playery += 5;
            }

            Invalidate();
        }

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.A)
            {
                left = true;
                right = false;
                up = false;
                down = false;
            }

            if (e.KeyCode == Keys.D)
            {
                right = true;
                left = false;
                up = false;
                down = false;
            }

            if (e.KeyCode == Keys.W)
            {
                up = true;
                down = false;
                left = false;
                right = false;
            }

            if (e.KeyCode == Keys.S)
            {
                down = true;
                up = false;
                left = false;
                right = false;
            }
        }

        private void Form1_KeyPress(object sender, KeyPressEventArgs e)
        {

        }

        private void Form1_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.A)
            {
                left = false;
            }

            if (e.KeyCode == Keys.D)
            {
                right = false;
            }

            if (e.KeyCode == Keys.W)
            {
                up = false;
            }

            if (e.KeyCode == Keys.S)
            {
                down = false;
            }
        }
    }
}

我想让玩家在触及敌人的左侧时停止移动,但我不断收到错误,并且它突出显示 if (Player.IntersectsWith(Enemy.Left))并说Can't convert int into System.Drawing.Rectangle任何想法? 我试图看看这是否有效

if (Player.IntersectsWith(Enemy)) 
{
    left = false; 
    right = false; 
    up = false; 
    down = false;
}

但当然它会让玩家保持原位。

1 个答案:

答案 0 :(得分:0)

您似乎想要特定的碰撞。

你应该尝试:

<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
(Open your dev tools to view the console)
<div data-bind="yourBindingName: someValue ">
</div>
<button data-bind="click: clickme">Click me!</button>

这样你就可以检查玩家的右侧是否与敌人的左侧相交,并且玩家位置的左侧是否小于敌人位置的左侧(玩家位于敌人的左侧) )

你必须在碰撞中添加高度和东西以使它能够传递敌人,但我认为你发布的它应该可以正常工作。

注意:代码未经测试,让我知道你是如何继续的。