• C#2Dcollision检测问题

  • 本文关于 c#,2d,gdi+,collision-detection
  • CodeGo.net > C#2Dcollision检测问题
  •  

    C#2Dcollision检测问题



    c# 2d gdi+ collision-detection
    我坚持想弄清楚如何改变我的collision检测正常工作,我得到了一个堆叠内列出我所有的墙对象,然后当玩家移动i循环直通每面墙对象,并调用这取决于如果返回true或false对象是内部的壁或没有。 壁collision检测(X-和Y-坐标是墙壁的位置)
    public bool DetectCollision(float x, float y)
     {
      if ((x >= this.XCoordinate && x <= (this.XCoordinate + this.BlockWidth)) && (y >= this.YCoordinate && y <= (this.YCoordinate + this.BlockHeight)))
       return true;   
      else
       return false;
     }
    
    所以在我的播放器函数,当玩家试图移动,我添加了一个临时的X,Y坐标 CodeGo.net,并检查那些撞击在墙上,如果他们做什么也没发生,否则我移动的球员。 但我注意到,这是行不通的,因为它应该是,如果我加一块墙的它里面只检查右下角的collision检测? 播放机
      float x, y;
      if (direction == Direction.E)
      {
       x = LiveObjects.player.XCoordinate - MovementSpeed;
       y = LiveObjects.player.YCoordinate;
      }
      else if (direction == Direction.W)
      {
       x = LiveObjects.player.XCoordinate + MovementSpeed;
       y = LiveObjects.player.YCoordinate;
      }
      else if (direction == Direction.N)
      {
       x = LiveObjects.player.XCoordinate;
       y = LiveObjects.player.YCoordinate - MovementSpeed;
      }
      else
      {
       x = LiveObjects.player.XCoordinate;
       y = LiveObjects.player.YCoordinate + MovementSpeed;
      }
      if (GameMechanics.DetectWallCollision(x, y) || GameMechanics.DetectWallCollision((x + LiveObjects.player.BlockWidth), (y + LiveObjects.player.BlockHeight))
      {
       OnPlayerInvalidMove(null, new PlayerEventArgs());
       return;
      }
    
    和环路DetectWallCollision就是:
    foreach (Wall wall in LiveObjects.walls)
      {
       if (wall.DetectCollision(x, y))
        return true;
      }
      return false;
    
    任何想法?
    本文地址 :CodeGo.net/1482685/
    -------------------------------------------------------------------------------------------------------------------------
    1.还有就是你说,得到墙的位置-但如果我理解你的代码正确,则送交DetectWallCollision x和y是位置(球员后和手的位置下降到 你调试你的代码,看看有什么坐标传递到并追踪你的如果-要去的路线? 如果它是不可能的调试代码不管是什么原因-写入轨迹文件-我认为该解决方案将落入你的腿上;)
    2. 我假设没有任何事情在你的世界是无限小的(即是一个像素的大小)。拥有真正的包围盒的collision,你一定要考虑两个对象的大小,不只是一个。
    boolean intersectsEntity(Entity e)
    {
     return (e.position.x <= position.x + size.x) &&
    	  (e.position.y <= position.y + size.y) &&
    	  (e.position.x + e.size.x >= position.x) &&
    	  (e.position.y + e.size.y >= position.y);
    }
    
    这当然假设一个实体拥有,其位置和大小的矢量。所以size.x==宽度和size.y==高度。
    3. 你的东西都是围绕着错误的方式。用坐标0,0系统在左上角 CodeGo.net,当你向下移动或向右积极增加,那么西将左,减少的X值,和反向的orient。你正在做的相反。
    本文标题 :C#2Dcollision检测问题
    本文地址 :CodeGo.net/1482685/
    1. FCKEditor如何过滤脚本?
    2. 导出DataGrid中使用PDF格式的C#
    3. 数组怎样移位操作
    4. 突然变的手表停止工作(VS)
    5. Winform如何读写取Web.config
    6. 从combinations框列表框更新
    7. 析下结果 using System;us
    8. 访问sharepoint的“用户信息列表”通过一个web服务
    9. 问下ASP.Net中如何使用ssl?
    10. 我该如何申请tracefilters和sourcefilters在应用程序中

     
    

    Copyright © 2017 CodeGo.net
    http://codego.net/xinwen/ 足球比分网 足球比分 医药招商网 邵阳县新闻