
åºæã®ä»£ããã«ã
ç§ã¯ãã€ãã³ã³ãã¥ãŒã¿ãŒã²ãŒã ã倧奜ãã§ã倧奜ãã§ãã 圌ãã¯ããçš®ã®ç¬èªã®å éšéæ³ãæã£ãŠããŸããããã¯åžžã«åæã«é åçã§é åçã§ãã ç§ã®äººçã§ã¯ãããã©ã³ã®WolfensteinãDune 2ããçŸä»£ã®å€§ãããäœãŸã§ãäœåãã®ã²ãŒã ãç¹°ãè¿ããŠããŸããã ãããŠä»ã次ã®ããããçµããŠæçµçãªãããªãšã¯ã¬ãžãããèŠããšãããããâŠïŒããšããèããé ã®äžã«ãŸããŸãã²ããããŸãã
ããããæ¬åœã«ãããªããããªãèªèº«ã®ã²ãŒã ãåããæžãããã©ãã§ãããïŒ ãã¡ãããAAAã®ã¿ã€ãã«ãåç¬ã§è¡ãããšã¯ã§ããªãããšã¯æããã§ãããããã¯é·å¹Žã«ãããäœæ¥ãªã©ã§ãããéã¯é²ãã®ã§ããããã ããŸããŸãã¹ã¯ãããããã°ã©ãã³ã°ã§ã¯ççŽã«èšã£ãŠåŒ±ãã®ã§ãWebéçºè ã«ãšã£ãŠã¯ããã»ã©å€ãã®éžæè¢ã¯ãããŸããã ããããè¿å¹Žããã¹ãŠãåçã«å€åããä»ã§ã¯ãã©ãŠã¶ãŒã¯ã³ãŒããŒã¡ãŒã«ãŒãšå€ãã®å ±éç¹ããããjavascriptã¯ç§ã®ãããªãã®ã§ã¯ãªããè»äºéšéã®ããŒãºãç°¡åã«æºããããšãã§ããŸãã
次ã®æèãšããªãæ·±å»ãªé¢šéªã®æäžã«ãAnt.Karlovã®ã²ãŒã åŠè ã§Box2dã«é¢ããèšäºã«åºäŒããŸããã èªãã§å€¢ãèŠãåŸãç§ã¯ããã«ãã®ã©ã€ãã©ãªã®JSããŒããèŠã€ããŸããããããŠãäœããå°ãããããšããå€ãã¯ã¬ã€ãžãŒãªã¢ã€ãã¢ããããŠæãéèŠãªããšã¯ç§ã®ãã®ããå æ°ãåãæ»ãå§ããŸããã
äžè¬ã«ãããå°ãªãåãã¿ãããå€ãã®ä»äºã èå³ãæã£ãŠããã ããã°å¹žãã§ãã CPAPã§Angry Birdsã䜿çšããããšãå³ããç¥ãèš±ããŠãããŸã^ _ ^
玹ä»ãšå 責äºé
äžé£ã®ããŒãå šäœã®æçµçãªç®æšã¯ãå°ãªããšã3çš®é¡ã®æweaponæŠåšãš5ã€ã®ç°ãªãã¬ãã«ã§ãAngry Birdsã®æ¬æ Œçãªã¯ããŒã³ãäœæããããšã§ãã ã¯ãããã§ã«ååãªæ°ããããããŸããŸãªã¬ã€ã¢ãŠãã§ãããAngry Birdsèªäœãå°ãªããšã3ã€ã®ããŒãžã§ã³ã§ãããäœããç·Žç¿ããå¿ èŠããããŸããïŒ ãã®éçšã§ãç©çãšã³ãžã³èªäœãã©ã¹ã¿ãŒã°ã©ãã£ãã¯ã¹ã®åŠçãã¬ãã«ãšãã£ã¿ãŒïŒããã¯ééããªãå¿ èŠïŒãã¡ãã¥ãŒ/ã¯ã¬ãžãã/èšå®ã®åœ¢åŒã®ãã€ã³ãã£ã³ã°ããµãŠã³ããšé³æ¥œããã®ä»äœåãã®éèŠãªããšãã¹ãŠã«è§ŠããããšããŸãã å®éãç§èªèº«ã¯ãŸã ãããã®ãã¹ãŠãæã£ãŠããããã§ã¯ãããŸããããå·çã®éçšã§ãäœãã©ããã£ãŠãã£ãã®ãããããŠãããäœã«ã€ãªãã£ãã®ããããã§èª¬æããŸãã
ããã€ãã®ç¹ã«é·ãã³ãŒããæ¥åã§ç€ºããŸãã ç¹ã«ã€ã©ã€ã©ãã人ã®ããã«ãã¡ã¢ã®æåŸã«å®éã®äŸãžã®ãªã³ã¯ããããŸãã
å¯äžã®ããš-ç§ã¯ããã®ã²ãŒã éçºè ã§ã¯ãããŸãããéåžžã«å€§ããªããŒãªã³ã°ã¬ãŒããšå€§ããªãã³ãã®è©°ã蟌ã¿ã®å©ããåããŠå€ãã®æé ãäžããããŸãããã®ãããã©ããã§ééããç¯ããå Žåãå³å¯ã«å€æãããããããæããªãã§ãã ããã
è¡ããïŒ
ããã§ã¯å§ããŸãããã æåã«å¿ èŠãªããšã¯ãã²ãŒã ã¯ãŒã«ããäœæãããã¹ãã¬ãã«ãå ¥åããŠãæåã®ãé³¥ããæåã®ãè±ãã«æã蟌ãããšããããšã§ãã Angry Birdsèªäœã§ç䌌çŸå®ã®ç©çåŠãèŠãã®ã§ãã²ãŒã ã®äžçã§è¡çªãé³¥ãè±ããã®ä»ã®ãªããžã§ã¯ãã®ç§»åãåŠçããã®ã«å¿ããç©çãšã³ãžã³ãå¿ èŠã§ãã
ããã€ãã®çç±ãããç©çãšã³ãžã³ãšããŠBox2dãéžæããŸããã
1.圌ã«ã¯ããªã匷åãªFlashã³ãã¥ããã£ãããããã«ããã¢ããã€ã¹ãæ±ããããšãã§ããŸãã
2.䜿çšããããšã«ããBox2dWebã©ã€ãã©ãªã¯ãçŽæ¥Box2dASããŒãã§ãããããå°ãªããšãåç §APIã¯æ¢ã«ååšããŸãã
3.åã¢ã³ãŽã«èªã§ã¯ãããŸãããéçºããã»ã¹ãšãšã³ãžã³ã®å éšã«é¢ããååãªæ å ±ã
4.ãããŠããã¡ãããäœçŸãã®æåããã¢ããªã±ãŒã·ã§ã³ã
äžè¬ã«ãç§ãã¡ã«ã¯ãšã³ãžã³ããããŸããä»ãç§ãã¡ã¯å¿ èŠãªãã®ã倧ãŸãã«æ³åããŠãå°ãããŠå¿«é©ãªäžçãäœãå¿ èŠããããŸãã ãããããå°ããªHTMLãã©ã³ã¯ããå§ããŸãã ãã£ã³ãã¹ããŒãžã«ããããããŠãã²ãŒã ã®ããŒã¹ãªããžã§ã¯ããäœæããŸãã
< html >
< é >
< title >æã£ãŠããé³¥WRYYYYYYYY !!!! < / ã¿ã€ãã« >
< script src = "/js/jquery.js" type = "text / javascript" > < / script >
< script src = "/js/box2d.js" type = "text / javascript" > < / script >
< ã¹ã¯ãªãã >
$ïŒããã¥ã¡ã³ãïŒ.readyïŒé¢æ°ïŒïŒ{
æ°ããã²ãŒã ïŒïŒ;
}ïŒ;
< / ã¹ã¯ãªãã >
< æ¬äœ >
<canvas id = "canvas" width = "800" height = "600" style = " background- color ïŒïŒ 333333 ; "> </ canvas>
< / æ¬äœ >
< ã¹ã¯ãªãã ã¿ã€ã = "text / javascript" >
ã²ãŒã =é¢æ°ïŒïŒ{
...
}
< / ã¹ã¯ãªãã >
< / html >
çŽ æŽããããããã«å®éšããããã®ãã³ãã¬ãŒãããããŸãã ããã§ãç©ççãªäžçãäœæããBox2dãç©æ¥µçã«äœ¿çšããå¿ èŠããããŸãã ãããç§ãã¡ãããããšã§ãã
ã²ãŒã = é¢æ° ïŒ ïŒ {
//ããã«ãªããžã§ã¯ãã¿ã€ããå®æ°ãšããŠæå®ããããšã«ããŸãã
const PIG = 1 ;
const BIRD = 2 ;
const PLANK = 3 ;
//ãthrowããåŠçãããšãã«å¿ èŠã«ãªããã©ã°ã
isMouseDown = false ;
//ä»®æ³ããã³ã³ã®æªæ¥ã®ã¬ã
mouseJoint = false ;
//ã¹ããŒåŠçäžã«äœ¿çšãããŸã
body = false ;
mousePosition = { x ïŒ 0 ã y ïŒ 0 } ;
//çŸåšã®ããŒãºã«å¿ èŠãªãã¹ãŠã®ãªãœãŒã¹ã
//å€èªäžèœã§èªã¿ã«ããã³ãŒãã®ããã¡ãŒãã«ããããã¯ããªãããã«ãããã«åå®çŸ©ããããšã«ããŸããã
//åãªãœãŒã¹ã®å€èšäºã®åŸåã§èª¬æããããšããŸãã
b2AABB = Box2Dã è¡çª b2AABB ;
b2World = Box2Dã ãã€ããã¯ã¹ ã b2World ;
b2Vec2 = Box2Dã å ±é æ°åŠ b2Vec2 ;
b2DebugDraw = Box2Dã ãã€ããã¯ã¹ ã b2DebugDraw ;
b2Body = Box2Dã ãã€ããã¯ã¹ ã b2Body ;
b2BodyDef = Box2Dã ãã€ããã¯ã¹ ã b2BodyDef ;
b2FixtureDef = Box2Dã ãã€ããã¯ã¹ ã b2FixtureDef ;
b2PolygonShape = Box2Dã è¡çª ã·ã§ã€ã ã b2PolygonShape ;
b2CircleShape = Box2Dã è¡çª ã·ã§ã€ã ã b2CircleShape ;
b2MouseJointDef = Box2Dã ãã€ããã¯ã¹ ã ãžã§ã€ã³ã b2MouseJointDef ;
b2ContactListener = Box2Dã ãã€ããã¯ã¹ ã b2ContactListener ;
//ã¯ãŒã«ããäœæããŸãã
world = new b2World ïŒ
new b2Vec2 ïŒ 0ã10 ïŒ //éåãã¯ãã«ã
ã true // doSleepãã©ã°ã
ïŒ ;
init = function ïŒ ïŒ { //ãªããžã§ã¯ãã®äœææã«åŒã³åºããããç§ãã¡ã®äžçã®ãã¹ãŠã®åæå
...
}
init ïŒ ïŒ ;
}
äžçã®ãã©ã¡ãŒã¿ãŒã«ã€ããŠããå°ã詳ããèŠãŠãããããšæããŸãã æåã¯éåãã¯ãã«ã§ãã Box2dã¯ãåšå²ã®äžçã®ç©çãååã«è©³çŽ°ã«ã¢ããªã³ã°ããŠãããããéåã®åœ±é¿ãªãã§ã¯ã§ããŸããã ãã®ãã¯ãã«ã䜿çšããŠãéåå é床ãY軞ã«æ²¿ã£ãŠ1ç§ããã10ä»®æ³ã¡ãŒãã«ã«èšå®ããŸã2çªç®ã®ãã©ã¡ãŒã¿ãŒdoSleepã¯ãçŸåšéã¢ã¯ãã£ããªèŠçŽ ãèšç®ããªãããã«ããŸãã ããã¯äœæ¥é床ã«å€§ãã圱é¿ããããããã®ãã©ã¡ãŒã¿ãŒãå€æŽããããšã¯ãå§ãããŸããã
ãŸããBox2dãããã©ã«ãã§å·Šäžé ãéå§ç¹ãšãã座æšç³»ã䜿çšããããšãè¿œå ããããšæããŸãã
ã²ãŒã ã®ã¹ã¯ãªãŒã³åŠçã¯ãã¬ãŒã ããšã«è¡ãããBox2dãäŸå€ã§ã¯ãªãããšãããã®èª°ããç¥ã£ãŠãããšæããŸãã ãããã£ãŠããªããžã§ã¯ãã®åèšç®ãšã°ã©ãã£ãã¯ã®åæç»ã®ããã«åžžã«åŒã³åºãããããã«ãæŽæ°ã¡ãœãããäœæãããã®ã¡ãœãããSetTimeoutã«é§åããå¿ èŠããããŸãã
ã²ãŒã = é¢æ° ïŒ ïŒ {
...
init = function ïŒ ïŒ {
ãŠã£ã³ããŠã setInterval ïŒæŽæ°ã 1000/60 ïŒ ;
}
æŽæ°= é¢æ° ïŒ ïŒ {
äžçã ã¹ããã ïŒ 1 / 60ã10ã10 ïŒ ;
äžçã DrawDebugData ïŒ ïŒ ;
äžçã ClearForces ïŒ ïŒ ;
}
}
updateïŒïŒé¢æ°ã§ã¯ããŸãäžçã®æŽæ°é »åºŠïŒ1ç§ããã60ãã¬ãŒã ïŒãèšå®ãããªããžã§ã¯ãã®é床ãš1ã¯ããã¯ãµã€ã¯ã«ããšã®äœçœ®ã®å€åã®åŠçã€ãã³ãã®æ倧æ°ãèšå®ããŸãã ãããã®ãã©ã¡ãŒã¿ãŒãå¢ãããšãå šäœçãªåå¿é床ã¯äžãããŸããããªããžã§ã¯ãã®æ°ãå¢ãããšãã·ã¹ãã ãªãœãŒã¹ã«åãããæžå°ãããšã枬å®ããšã«ãªããžã§ã¯ãã®åŠçãäžæ£ç¢ºã«ãªããŸãã 10-éåžžã«å¥å šãªå¹³åã
ãã¡ãããä»ã§ã¯ããã£ã³ãã¹ããšã³ãžã³ãã³ãã©ãŒã«çµã³ä»ããŠãäœããæãããšãã§ããŸãã
ã²ãŒã = é¢æ° ïŒ ïŒ {
...
init = function ïŒ ïŒ {
buildWorld ïŒ ïŒ ;
initDraw ïŒ ïŒ ;
ãŠã£ã³ããŠã setInterval ïŒæŽæ°ã 1000/60 ïŒ ;
}
initDraw = function ïŒ ïŒ {
debugDraw = new b2DebugDraw ïŒ ïŒ ;
debugDraw SetSprite ïŒ documentãGetElementById ïŒ "canvas" ïŒ ã GetContext ïŒ "2d" ïŒ ïŒ ;
debugDraw SetDrawScale ïŒ 30.0 ïŒ ;
debugDraw SetFillAlpha ïŒ 0.5 ïŒ ;
debugDraw SetLineThickness ïŒ 1.0 ïŒ ;
debugDraw SetFlags ïŒ b2DebugDrawãE_shapeBit | b2DebugDrawãE_jointBit ïŒ ;
äžçã SetDebugDraw ïŒ debugDraw ïŒ ;
}
buildWorld = function ïŒ ïŒ {
fixDef = new b2FixtureDef ïŒ ïŒ ;
fixDefã å¯åºŠ = 1.0 ;
fixDefã æ©æŠ = 0.5 ;
fixDefã åçº = 0.2 ;
}
}
ã¯ããçŸåšã®ãã©ãŒã ã§è¡šç€ºããããã«ãããã°ã¢ãŒãã®ã¿ã䜿çšããããšãè¿œå ãã䟡å€ããããŸãã ãã¯ã¹ãã£ãã°ã©ãã£ãã¯ã¹ã䜿çšããã«ãç©çäžçã®ãªããžã§ã¯ããçŽæ¥è¡šçŸããŸãã ãããã-çŸç¶ã®ãŸãŸã ãã®ãããupdateïŒïŒé¢æ°ã§DrawDebugDataïŒïŒã¡ãœãããåŒã³åºããŸãããã®è¡šç€ºã®ããã«ãb2DebugDrawïŒïŒãªããžã§ã¯ããäœæããŸãã åãå Žæã§ãã¹ã±ãŒã«ãåéæ床ãèšå®ããæ£ç¢ºã«æç»ããå¿ èŠããããã®ããããã§èšå®ããŸãã 詳现ã«ã€ããŠã¯ãb2DebugDrawïŒïŒã®ãã¹ãŠãAPIãªãã¡ã¬ã³ã¹ã«è©³çŽ°ã«èª¬æãããŠããŸãã
ãŸããBox2dã¯ã°ãªããããŒã¿ãšããŠãã¯ã»ã«ãæäœããªãããšãè¿œå ãã䟡å€ããããŸãã ããšããšã¯æšæºCã·ã¹ãã ã䜿çšããããã«èšèšãããŠãããããã¡ãŒãã«ãããã°ã©ã ãç§ãããã³å¯Ÿå¿ããå€æããããŸãã ããã§ã¯ããã®é åã®è©³çŽ°ã«ã¯è§ŠããŸããããBox2dãã¥ãŒã®1ã¡ãŒãã«ã¯çŽ30ãã¯ã»ã«ã®ç»é¢ã¹ããŒã¹ã§ããããšã«æ³šæããŠãã ããã
ããŠãfixDefïŒïŒæ§é ã«ã€ããŠããå°ãè¿œå ããŸã-ããã¯ãªããžã§ã¯ãç©çåŠã®åºæ¬çãªãã©ã¡ãŒã¿ãŒã®ã»ããã§ãã ãã®æ§é ã§ã¯ããªããžã§ã¯ãã®çžäºäœçšã®ããã»ã¹ã®ç©çåŠãèšç®ãããåºæ¬çãªãã©ã¡ãŒã¿ãŒãèšè¿°ãããŸãã ã芧ã®ãšããããªããžã§ã¯ãã®æ©æŠãå¯åºŠã匟æ§ã®ãã©ã¡ãŒã¿ãŒã瀺ããŸããã
æç»
ã²ãŒã ã®ä»çµã¿ãèšèšãããšãã倧äºãªç®æšã«è¿ã¥ããŸããããæåã«ããã€ãã®ãªããžã§ã¯ããç§ãã¡ã®äžçã«çœ®ããããããäœããããããšããå¿ èŠããããŸãã ãããã£ãŠãã¹ããŒã¹ã®ãªããã¿ãŒãæ§ç¯ããinitïŒïŒã¡ãœããã«è¿œå ããé·æ¹åœ¢ãäžæ» ã®ããŒããšããŠãåããè±ããšããŠã¬ãã«ãæç»ããŸãã
ã²ãŒã = é¢æ° ïŒ ïŒ {
...
PigData = function ïŒ ïŒ { } ;
PigData ãããã¿ã€ã GetType = function ïŒ ïŒ {
PIGãè¿ã ãŸãã
}
PlankData = function ïŒ ïŒ { }
... // PigData.GetTypeïŒïŒãšåæ§ã®GetTypeïŒïŒ
buildWorld = function ïŒ ïŒ {
...
bodyDef = new b2BodyDef ïŒ ïŒ ;
bodyDefã ã¿ã€ã = b2Bodyã b2_staticBody ;
fixDefã shape = new b2PolygonShape ;
fixDefã åœ¢ç¶ SetAsBox ïŒ 20ã2 ïŒ ;
bodyDefã ããžã·ã§ã³ ã ã»ãã ïŒ 10ã600 / 30 + 1.8 ïŒ ;
äžçã CreateBody ïŒ bodyDef ïŒ ã CreateFixture ïŒ fixDef ïŒ ;
... //ããã«3ã€ã®å£
canvasPosition = $ ïŒ "#canvas" ïŒ ã ãªãã»ãã ïŒ ïŒ ;
}
buildLevel = function ïŒ ïŒ {
createPlank ïŒ 22ã20ã0.25ã2 ïŒ
... //ããã«8ã€ã®ããŒããæç»ãã
createPig ïŒ 20ã11ã0.5 ïŒ ;
... //ããã«2é ã®è±
}
createPlank = function ïŒ x ã y ã width ã height ïŒ {
bodyDefã ã¿ã€ã = b2Bodyã b2_dynamicBody ;
fixDefã shape = new b2PolygonShape ;
fixDefã åœ¢ç¶ SetAsBox ïŒ
å¹
ãé«ã
ïŒ ;
bodyDefã ããžã·ã§ã³ ã x = x ;
bodyDefã ããžã·ã§ã³ ã y = y ;
ãã©ã³ã¯=ã¯ãŒã«ãã CreateBody ïŒ bodyDef ïŒ ;
æ¿ã SetUserData ïŒ æ°ãã PlankData ïŒ ïŒ ïŒ ;
æ¿ã CreateFixture ïŒ fixDef ïŒ ;
}
createPig = function ïŒ x ã y ã r ïŒ {
... // createPlankã¡ãœããã«äŒŒãã¡ãœããã§ãããCircleShapeãšPigDataïŒïŒã䜿çšãããŸãã
}
}
Box2dã§ã¯ãã²ãŒã ããžãã¯ãçŽæ¥å®è£ ã§ããè¿œå ã®ããŠãŒã¶ãŒãã€ã³ã¿ãŒãã§ã€ã¹ãä»»æã®ç©çãªããžã§ã¯ãã«ãã€ã³ãã§ããŸãã ãã®ãããPigDataãšPlankDataãšãã2ã€ã®ãªããžã§ã¯ããè¿œå ããŸããããããã¯ãªããžã§ã¯ãã®ã¿ã€ããè¿ããŸãã ããã¯ãè¡çªåŠçãæ±ããšãã«å°ãåŸã§éèŠã«ãªããŸãã
BodyDefæ§é ã¯ããªããžã§ã¯ãã®å¹ŸäœåŠçç¹æ§ãšãã®äžè¬çãªåäœã説æããããšãç®çãšããŠããŸãïŒFixtureDefã¯ãã®ç©ççç¹æ§ã説æããŸãïŒã BodyDefã§ã¯ãéçãŸãã¯åçã®ãããã§ããããåããã1ã€ãŸãã¯å¥ã®ãããã¯ã®èšç®æ¹æ³ã瀺ããŸãã äžè¬çã«ãBox2dã«ã¯ãããã¥ã¡ã³ãã«èšèŒãããŠããããã«ã3çš®é¡ã®ãªããžã§ã¯ãããããŸã-éçãã€ãŸã å®å šã«éçãªãªããžã§ã¯ãïŒDebugViewå -ç·ã®ãªããžã§ã¯ãïŒãåç-å®å šã«ç¬ç«ããåçãªããžã§ã¯ããããã³éååŠç-移åã®åå ãšãªããªããžã§ã¯ãã äŸãšããŠãéçã¯éè·¯ã§ãããåçã¯è»ãšè»èŒªã®ãµã¹ãã³ã·ã§ã³ã§ãããåçã¯è»ã®ãšã³ãžã³ã§ãã
ããã§ããªããžã§ã¯ãã®å¹ŸäœåŠç圢ç¶ããã®å·Šäžé ã®äœçœ®ãããã³å¯žæ³ã瀺ããŸãã ãã¹ãŠã¯ã¡ãŒãã«åäœã§ãïŒãããç§ã®ãµã€ãºãšãã¯ã»ã«ãäžèŽããªãçç±ãã©ãã ãæšæž¬ããŸãããïŒïŒã
æåŸã«ãæ°ããdrawLevelïŒïŒã¡ãœãããçµäºããŸãããã®ã¡ãœããã¯ãããŒããšè±ãšãšãã«ã¬ãã«å šäœãæç»ããŸãã
ã¹ãªã³ã°ã·ã§ãã
ç©èªã®æãèå³æ·±ãéšåã 次ã«ãè±ã«é³¥ãæŸã€ããã³ã³ã®ä»»æã®ãããã¿ã€ããäœæããŠã¿ãŸãããã
ããã«ã¯ããŠã¹ãå¿ èŠã§ãã
ã²ãŒã = é¢æ° ïŒ ïŒ {
...
init = function ïŒ ïŒ {
bindMouse ïŒ ïŒ ;
...
}
bindMouse = function ïŒ ïŒ {
$ ïŒããã¥ã¡ã³ãïŒ ã mousedown ïŒ function ïŒ e ïŒ {
isMouseDown = true ;
handleMouse ïŒ e ïŒ ;
$ ïŒããã¥ã¡ã³ãïŒ ã bind ïŒ "mousemove" ã { } ã handleMouse ïŒ ;
} ïŒ ;
$ ïŒããã¥ã¡ã³ãïŒ ã mouseup ïŒ function ïŒ e ïŒ {
isMouseDown = false ;
$ ïŒããã¥ã¡ã³ãïŒ ã unbind ïŒ "mousemove" ïŒ ;
} ïŒ ;
}
handleMouse = function ïŒ e ïŒ {
mouseX = ïŒ eãclientX - canvasPositionãleft ïŒ / 30 ;
mouseY = ïŒ eãclientY-canvasPositionãtop ïŒ / 30 ;
} ;
æŽæ°= é¢æ° ïŒ ïŒ {
if ïŒ isMouseDown ïŒ {
if ïŒ ïŒ ïŒ body ïŒ ïŒ {
mousePosition = { x ïŒ mouseX ã y ïŒ mouseY } ;
createPig ïŒ mouseX ã mouseY ã 0.40 ïŒ ;
body = getBodyAtMouse ïŒ ïŒ ;
md = new b2MouseJointDef ïŒ ïŒ ;
mdã bodyA =ã¯ãŒã«ãã GetGroundBody ïŒ ïŒ ;
mdã bodyB = body ;
mdã ã¿ãŒã²ãã Set ïŒ mousePositionãX ã mousePositionãY ïŒ ;
mdã collideConnected = true ;
mdã maxForce = 300.0 *æ¬äœã GetMass ïŒ ïŒ ;
mouseJoint = worldã CreateJoint ïŒ md ïŒ ;
äœã SetAwake ïŒ true ïŒ ;
}
äœã SetPosition ïŒ æ°ãã b2Vec2 ïŒ mouseX ã mouseY ïŒ ïŒ ;
}
if ïŒ mouseJoint && ïŒ isMouseDown ïŒ {
mouseX = mousePositionã x ;
mouseY = mousePositionã y ;
if ïŒ getBodyAtMouse ïŒ ïŒ ïŒ {
äžçã DestroyJoint ïŒ mouseJoint ïŒ ;
mouseJoint = null ;
body = false ;
}
}
...
}
}
ããã§äœãããŸãããïŒ 1ã€ç®ã¯ããã¡ãããmousedownããã³mouseupããŠã¹ãã³ãã©ãŒãå°ããªã²ãŒã ã«éä»ãã«ãªã£ãŠããããšã§ãã ããã§ããã¬ã€ãã£ãŒã«ãã§ããŠã¹ãã¿ã³ãã¯ãªãã¯ãããšãisMouseDownãã©ã°ãèšå®ãããŸãããŸããããŠã¹ã移åãããšãmouseXããã³mouseYã«æ ŒçŽãããŠãã座æšãå€æŽãããŸãã 2çªç®ã«éæããã®ã¯ãããŠã¹ãã¯ãªãã¯ããããšãã«ãªããžã§ã¯ããåçã«äœæããããšã§ããããã®éšåãupdateïŒïŒã¡ãœããã«å ¥ããŸããã 倧ãŸãã«èšã£ãŠãç§ãã¡ã®åœã§ã¯ããã¿ãã¿ã€ãã®ãªããžã§ã¯ãã§ããã«ãããããããããã«ãªããã°ãé³¥ããããã«äœæããŸãã
ããã«èå³æ·±ãã®ã¯ãGetBodyAtMouseïŒïŒã¡ãœããã䜿çšããŠãåŠçã®ããã«é³¥ã®ãªããžã§ã¯ãæ¬äœãããã«ååŸããMouseJointã䜿çšããŠãããäžçã«ã¢ã¿ããããããšã§ãã ã€ãŸã é³¥ãçºå°ããããã³ã³ã®èŒªãŽã ãäœæããã®ã¯MouseJointã§ãã åãå Žæã§ãæè»ãªã«ãããªã³ã°ãšæ倧ã®åã®äœçšæ¹åã瀺ããŸãã
ãã®äŸã¯ãããŠã¹ãã¿ã³ãã¯ãªãã¯ãããšãç¹åŸŽçãªéã¿ã垯ã³ãé垯ãäžå¿ã«ä»ããæ°ããåã衚瀺ãããããšãæ確ã«ç€ºããŠããŸãã ããŠã¹ãã¿ã³ãæŒããªããšããã³ãã«ã¯åã®äžå¿ãŸã§äŒžã³ãŸãã ããããããªããçµããš...
æŒããããšisMouseDownãã©ã°ãå€æŽããã2çªç®ã®æ¡ä»¶ãæ©èœãå§ããŸããåãgetBobyAtMouseã¡ãœããã䜿çšããŠãããã£ãã¢ã¿ãããããé垯ã®äžå¿ã亀差ãããã©ãããå€æãã亀差ããå Žåã¯é垯ãåé€ããŸãã 次ã«ã身äœãããªãã¡ ç§ãã¡ã®é³¥ã®è±ã¯é£ãã§ããªããã¹ãŠã®è±ãžã®ææã®ããã«èªç±é£è¡ã«éãããŸã^ _ ^ã
GetBodyAtMouseïŒïŒã¡ãœããã«ã€ããŠãããã«è©³ãã説æããããšæããŸããéåžžã«èå³æ·±ãã§ãã
é¢æ° getBodyAtMouse ïŒ ïŒ {
mousePVec = new b2Vec2 ïŒ mouseX ã mouseY ïŒ ;
var aabb = new b2AABB ïŒ ïŒ ;
aabbã lowerBound ã ã»ãã ïŒ mouseX - 0.001 ã mouseY - 0.001 ïŒ ;
aabbã upperBound ã èšå® ïŒ mouseX + 0.001 ã mouseY + 0.001 ïŒ ;
selectedBody = null ;
äžçã QueryAABB ïŒ getBodyCallback ã aabb ïŒ ;
selectedBodyãè¿ã ãŸãã
}
getBodyCallback = function ïŒ fix ïŒ {
if ïŒãã£ã¯ã¹ãã£ãGetBody ïŒ ïŒ ã GetType ïŒ ïŒ ïŒ= b2Bodyãb2_staticBody ïŒ {
if ïŒãã£ã¯ã¹ãã£ãGetShape ïŒ ïŒ ã TestPoint ïŒãã£ã¯ã¹ãã£ãGetBody ïŒ ïŒ ã GetTransform ïŒ ïŒ ã mousePVec ïŒ ïŒ {
selectedBody =ãã£ã¯ã¹ãã£ã GetBody ïŒ ïŒ ;
falseã è¿ã ãŸã ã
}
}
trueã è¿ã ãŸã ã
}
ããã§æåã«è¡ãããšã¯ãçŸåšã®ããŠã¹äœçœ®ã§æ°ãããã¯ãã«ãäœæããããšã§ãã 次ã«ãããŠã¹ãã€ã³ã¿ãŒã®äžã«ããBox2d座æšç³»ã®ç»é¢ã¹ããŒã¹ã®äžéšãå²ãåœãŠãæ§é ãäœæããgetBodyCallbackã䜿çšããŠãããŠã¹ã®äžã®é åãäœããã®ããã£ãšäº€å·®ãããã©ãããå€æããããã§ããã°ãæ°ããselectedBodyãèšå®ããŸãã ååãšããŠããã¹ãŠã¯åçŽã§ãããéèŠã§ãã
è±
ãã®ããŒãã®åã«ãååãšããŠãæšæºçãªäŸã®æŠèŠã§ã¯ãã¹ãŠãå調ã«é²ã¿ãŸããã ããããè¡çªãæ£ããåŠçããã«ã¯ãæ£çŽã«ããã¥ã¢ã«ãæãäžããªããã°ãªããŸããã§ããã ä»äœãããå¿ èŠããããŸããïŒ ã»ãã®å°ã-ã¬ãã«ã«ãããã¿ã確å®ã«æ¶ããããã«ããŸãã ããããæ¥è§Šããã ãã§ãªããäžå®ã®åªåã§ã®æ¥è§Šããã ãããè¡ãã«ã¯ãæšæºã®ã³ã³ã¿ã¯ããã³ãã©ãåå®çŸ©ããè¡çªäžã«ãã¿ãåä¿¡ããåèšã€ã³ãã«ã¹ã®ã«ãŠã³ããè¿œå ããå¿ èŠããããŸãã
ã²ãŒã = é¢æ° ïŒ ïŒ {
...
GameContactListener = function ïŒ ïŒ { } ;
GameContactListenerã ãããã¿ã€ã = b2ContactListenerã ãããã¿ã€ã ;
GameContactListenerã ãããã¿ã€ã PostSolve = function ïŒ contact ã impulse ïŒ {
if ïŒ contactãGetFixtureB ïŒ ïŒ ã GetBody ïŒ ïŒ ã GetUserData ïŒ ïŒ ïŒ {
var BangedBody =é£çµ¡å ã GetFixtureB ïŒ ïŒ ã GetBody ïŒ ïŒ ;
if ïŒ contactãGetFixtureB ïŒ ïŒ ã GetBody ïŒ ïŒ ã GetUserData ïŒ ïŒ ã GetType ïŒ ïŒ == PIG ïŒ {
var imp = 0 ;
for ïŒ aã€ã³ãã«ã¹ãnormalImpulses ïŒ {
imp = imp +ã€ã³ãã«ã¹ã normalImpulses [ a ] ;
}
if ïŒ imp > 3 ïŒ {
ç Žå£ããã ããã·ã¥ ïŒ BangedBody ïŒ ;
ãã³ãããããã£ã visible = false ;
BangedBody = null ;
}
}
}
var contactListener = new GameContactListener ïŒ ïŒ ;
äžçã SetContactListener ïŒ contactListener ïŒ ;
æŽæ°= é¢æ° ïŒ ïŒ {
...
destroyedBodies = Array ïŒ ïŒ ;
...
äžç ClearForces ïŒ ïŒ ; //éèŠïŒ
while ïŒ destroyedBodiesãlength > 0 ïŒ {
äžçã DestroyBody ïŒ destroyedBodiesãShift ïŒ ïŒ ïŒ ;
}
}
}
ããã§æåã«è¡ãããšã¯ãæšæºã®ContactListenerãåå®çŸ©ããããšã§ãã ããã¯ããã¹ãŠã®è¡çªãåŠçãããªããžã§ã¯ãã§ãã ããã§ãã¡ãœããã䜿çšããŠUserDataïŒïŒããã§ãã¯ããå®éã«ãããµã颚éªãã²ããããšã確èªãããããããããå¢ãã«æºè¶³ãããããããæŠå Žããé ããåé€ããããã«é åã«å ¥ããŸãã
ç§ã¯æ£çŽã«é ã«ç°ãæ¯ããããŸã-å¿ èŠãªåªåã®è¡åãæã§åãåããªããªã£ãã®ã§ãè¡åã®åŒ·ããã©ã³ãã ã«æŸããŸããã æé©ãªãªãã·ã§ã³ãéžæããããšãé¡ã£ãŠããŸãã ã¯ãŒã«ãã®äœæã§ã¯ãã¯ãŒã«ããéçãªç¶æ ã«ãªããŸã§è¡çªãçºçããããããã®ç¶æ ãéèŠã§ãïŒãããããã¬ãã«ãäœæãããšãã«Flashåæ§ã®ããŒãã®äžéšã®ã²ãŒã ã§èŠ³å¯ããŸãããããã¢ã¹ã©ãã®ç°¡åãªçæ£ïŒããã§ããå®éã«ã¯ããã¿ããã®ãããªè¡çªã§æ¶ããªãããã«-ç·ã€ã³ãã«ã¹ããã§ãã¯ããå¿ èŠããããŸãïŒã
æŽæ°ã¡ãœããã®æåŸã«ãClearForcesïŒïŒãåŒã³åºããåŸãé åãæ¶åãã空é£ã¶åŠ¹ã«å®¹èµŠãªãlessããããã¹ãŠã®è±ãåé€ããŸãã ãã®å ŽæãéèŠã§ãããšæå³çã«åŒ·èª¿ããŸãã-ç©çåŠã®èšç®ããã»ã¹ãé²è¡ãããŸã§ãåäžã®ãªããžã§ã¯ããåé€ããããšã¯ã§ããŸããã ãããã¯Box2dã®æ¡ä»¶ã§ãã ãã¹ãŠã®ãªããžã§ã¯ããæ°åŠãã解æŸãããåŸã«ã®ã¿ãããããèªç±ã«åé€ã§ããŸãã ããããå®éã«ã·ãŒã³ãçµãã£ãåŸã«ã®ã¿ãã¿ãç Žè£ããçç±ã§ãã
ãŸãšã
Fufãã¡ãã£ãšã·ãŒãã®ããã«å®æããŸããã 倧éã®ã³ãŒããšãšã©ãŒã®å¯èœæ§ããpoã³ããŸãã
ç§ãçŽæããããã«-äžèšã§èª¬æãããã¹ãŠãå®å šã«å®è£ ãããŠããäŸãžã®ãªã³ã¯ã
ããŠãçµæã®äœåã®ã¹ã¯ãªãŒã³ã·ã§ããïŒ

å®éãç§ãã¡ã«ã¯çŸåšå€ãã®äžæ£ç¢ºãããããŸã-ããªãã¯äžçã®ã©ãããã§ãä»»æã®æ¹åã«é³¥ãçºå°ããããšãã§ããŸããåã¯å¿ èŠä»¥äžã®ãã®ã§ããè±ã®æ»åŸåŸç¹ã¯ãããŸãããé³¥ã亀差ç¹ãéããŠçºå°ããããšãã§ããæããåé¢ããªããã°é³¥ã¯ãŸã£ããé³¥ã§ã¯ãªããè±ã§ãïŒ ããã§ããæåã®ã¬ã€ã€ãŒã¯éåžžã«æ©èœããã²ãŒã ã¡ã«ãã¯ã¹ã䜿çšããŠæç»ããããããããã€ãã®å°ããªããšãä»äžããããšã¯éåžžã«å¯èœã§ãã
è¿ãå°æ¥ã®èšç»ãã-ã«ãããªã³ã°ããã€ç Žå£ããå¿ èŠããããã決å®ããããžãã¯ãå€æŽããŸããããã§ãé³¥ãåã§èµ°ãããããšãã§ããŸãã ãã¡ãããã¬ãã«ãšãã£ã¿ãŒã䜿çšããå¿ èŠããããŸãã ããããããã¯æ¬¡ã®èšäºã®ãããã¯ã§ãã
ãæž èŽããããšãããããŸããããã€ãŠå»ºèšçãªæ¹å€ãããŸã^ _ ^
䟿å©ãªãªã¹ã
code.google.com/p/box2dweb-Box2dWebãJavascriptçšã®Box2dASããŒãã
www.box2dflash.org/docs/2.1a/reference-ã¢ã³ãã¢ã³ãŽã«APIãªãã¡ã¬ã³ã¹ã
docs.google.com/View?id=dfh3v794_41gtqs6wf4&pli=1-ãã·ã¢èªã§ããªãå®å šãªã¬ã€ãã VirtualMaestroãšåœŒã®ããã°-flashnotes.ruã«æè¬ããŸãã Box2dã«ã¯äŸ¿å©ãªããšããããããããŸãã
www.emanueleferonato.com-ç¹ã«Box2dããã³ã€ã³ãã£ãŒå šè¬ã«é¢ããéåžžã«åœ¹ç«ã€ããã°ã
ant - karlov.ru-éŠè¬è ã®ããã°ã誰ããèå³ãæã£ãŠãããªã^ _ ^