• R/O
  • SSH
  • HTTPS

nlgp1: Commit


Commit MetaInfo

Revision690 (tree)
Time2011-02-04 13:34:05
Authormassa_senohito

Log Message

RaycastEventの処理を追加
Rayが当たっている間、あたった物体の中心にXが表示される、
Rayhit関数の処理を変えると自由に処理が変えられる

Change Summary

Incremental Difference

--- trunk/Nlgp1/Nlgp1.B2DX/Gamemain.cs (revision 689)
+++ trunk/Nlgp1/Nlgp1.B2DX/Gamemain.cs (revision 690)
@@ -62,7 +62,7 @@
6262 {
6363 { UserDataKind.Name, "player" },
6464 { UserDataKind.CategoryBits,"111" },
65- {UserDataKind.MaskBits,"11"},
65+ {UserDataKind.MaskBits,"111"},
6666 {UserDataKind.GroupIndex,"10"}
6767 },
6868 new Dictionary<ObjectDataKind,float>(),
@@ -103,8 +103,8 @@
103103 FilterData f=new FilterData();
104104 f.CategoryBits = 1;
105105 f.GroupIndex = 1; f.MaskBits = 1;
106- DynamicBox d2 = new DynamicBox(new Vec2(50, 60), 45 * pi / 180, lineardamping, angularDamping);
107- d2.SetAsBox(25, 25, new Polygondef2(fric2, rest2, dens2, new myUserData("d2", 1, f, 2)), true);
106+ DynamicBox d2 = new DynamicBox(new Vec2(50, 60), 0 * pi / 180, lineardamping, angularDamping);
107+ d2.SetAsBox(16, 16, new Polygondef2(fric2, rest2, dens2, new myUserData("d2", 1, f, 2)), false);
108108 Polygondef2 d2p = new Polygondef2(friction, restitution, density, new myUserData("d2p", 3, f, 2));
109109 d2p.SetAsBox(24, 12, new Vec2(-20, 1), 0);
110110 d2p.Fil();
@@ -128,7 +128,7 @@
128128 //このインデックスをSetFilterに渡す
129129 //Shape.GetBody().GetUserData();がユーザーデータ
130130 //Shape.Get
131- f.GroupIndex=2;
131+ f.MaskBits=1;
132132 d2.SetFilter(f, 1);
133133
134134 if (DX.CheckHitKey(DX.KEY_INPUT.RETURN) && !keyflag)
--- trunk/Nlgp1/Nlgp1.B2DX/Box.cs (revision 689)
+++ trunk/Nlgp1/Nlgp1.B2DX/Box.cs (revision 690)
@@ -404,10 +404,13 @@
404404 }
405405 #endregion
406406
407+ //RayCastで得られた情報
407408 public Vec2 normal;
408409 public float lambda;
409410 public Colors color = Colors.None;
410-
411+ //イベント
412+ event EventHandler<RaycastEvent> raycast = new EventHandler<RaycastEvent>(Rayhit);
413+
411414 /// <summary>
412415 /// toまでの位置に光を投げ、当たった物(最大5つ)の配列を返す
413416 /// </summary>
@@ -424,6 +427,11 @@
424427 World w = SelfBody.GetWorld();
425428 Shape[] shapes = new Shape[5];
426429 w.Raycast(s, shapes, 5, true, null);
430+ if (shapes[0] != null)
431+ {
432+ EventHandler<RaycastEvent> temp = raycast;
433+ temp(this,new RaycastEvent(shapes));
434+ }
427435 /*
428436 ユーザーデータがほしいのなら
429437 foreach (Shape tem in shapes) tem.GetBody().GetUserData();
@@ -431,7 +439,15 @@
431439 return shapes;
432440
433441 }
434-
442+
443+ static void Rayhit(object sender, RaycastEvent ray)
444+ {
445+ foreach (Shape s in ray.Rayhit)
446+ {
447+ if (s != null) Debug.PrintContact(s.GetBody().GetPosition());
448+ }
449+ }
450+
435451 /// <summary>
436452 /// フィルタデータを変更する
437453 /// </summary>
@@ -446,5 +462,13 @@
446462
447463 SelfBody.SetUserData(UserData);
448464 }
465+
466+
467+
449468 }
469+ class RaycastEvent : EventArgs
470+ {
471+ public Shape[] Rayhit;
472+ public RaycastEvent(Shape[] rayhit) { Rayhit = rayhit; }
473+ }
450474 }
Show on old repository browser