Revision | 690 (tree) |
---|---|
Zeit | 2011-02-04 13:34:05 |
Autor | massa_senohito |
RaycastEventの処理を追加
Rayが当たっている間、あたった物体の中心にXが表示される、
Rayhit関数の処理を変えると自由に処理が変えられる
@@ -62,7 +62,7 @@ | ||
62 | 62 | { |
63 | 63 | { UserDataKind.Name, "player" }, |
64 | 64 | { UserDataKind.CategoryBits,"111" }, |
65 | - {UserDataKind.MaskBits,"11"}, | |
65 | + {UserDataKind.MaskBits,"111"}, | |
66 | 66 | {UserDataKind.GroupIndex,"10"} |
67 | 67 | }, |
68 | 68 | new Dictionary<ObjectDataKind,float>(), |
@@ -103,8 +103,8 @@ | ||
103 | 103 | FilterData f=new FilterData(); |
104 | 104 | f.CategoryBits = 1; |
105 | 105 | 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); | |
108 | 108 | Polygondef2 d2p = new Polygondef2(friction, restitution, density, new myUserData("d2p", 3, f, 2)); |
109 | 109 | d2p.SetAsBox(24, 12, new Vec2(-20, 1), 0); |
110 | 110 | d2p.Fil(); |
@@ -128,7 +128,7 @@ | ||
128 | 128 | //このインデックスをSetFilterに渡す |
129 | 129 | //Shape.GetBody().GetUserData();がユーザーデータ |
130 | 130 | //Shape.Get |
131 | - f.GroupIndex=2; | |
131 | + f.MaskBits=1; | |
132 | 132 | d2.SetFilter(f, 1); |
133 | 133 | |
134 | 134 | if (DX.CheckHitKey(DX.KEY_INPUT.RETURN) && !keyflag) |
@@ -404,10 +404,13 @@ | ||
404 | 404 | } |
405 | 405 | #endregion |
406 | 406 | |
407 | + //RayCastで得られた情報 | |
407 | 408 | public Vec2 normal; |
408 | 409 | public float lambda; |
409 | 410 | public Colors color = Colors.None; |
410 | - | |
411 | + //イベント | |
412 | + event EventHandler<RaycastEvent> raycast = new EventHandler<RaycastEvent>(Rayhit); | |
413 | + | |
411 | 414 | /// <summary> |
412 | 415 | /// toまでの位置に光を投げ、当たった物(最大5つ)の配列を返す |
413 | 416 | /// </summary> |
@@ -424,6 +427,11 @@ | ||
424 | 427 | World w = SelfBody.GetWorld(); |
425 | 428 | Shape[] shapes = new Shape[5]; |
426 | 429 | 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 | + } | |
427 | 435 | /* |
428 | 436 | ユーザーデータがほしいのなら |
429 | 437 | foreach (Shape tem in shapes) tem.GetBody().GetUserData(); |
@@ -431,7 +439,15 @@ | ||
431 | 439 | return shapes; |
432 | 440 | |
433 | 441 | } |
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 | + | |
435 | 451 | /// <summary> |
436 | 452 | /// フィルタデータを変更する |
437 | 453 | /// </summary> |
@@ -446,5 +462,13 @@ | ||
446 | 462 | |
447 | 463 | SelfBody.SetUserData(UserData); |
448 | 464 | } |
465 | + | |
466 | + | |
467 | + | |
449 | 468 | } |
469 | + class RaycastEvent : EventArgs | |
470 | + { | |
471 | + public Shape[] Rayhit; | |
472 | + public RaycastEvent(Shape[] rayhit) { Rayhit = rayhit; } | |
473 | + } | |
450 | 474 | } |