<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>azurenote.com</title>
		<link>http://azurenote.com/</link>
		<description>...</description>
		<language>ko</language>
		<pubDate>Sun, 31 Jan 2010 12:48:55 +0900</pubDate>
		<generator>Tistory 1.1 (http://www.tistory.com/)</generator>
		<item>
			<title>D Programming Language</title>
			<link>http://azurenote.com/10</link>
			<description>원문링크&amp;gt;&lt;a title=&quot;[http://www.digitalmars.com/d/index.html]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.digitalmars.com/d/index.html&quot;&gt;http://www.digitalmars.com/d/index.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
D는 시스템 프로그래밍 언어이다. 이것은 C와 C++의 강력함과 고성능에 루비나 파이썬같은 현대 언어들의 생산성을 더하는 데 중점을 두었다. 주목할 점은 품질관리(QA)의 필요성, 문서화, 관리, 이식성과 신뢰성이다.&lt;br /&gt;
&lt;br /&gt;
D언어는 정적 타입을 갖고, 기계어로 직역된다. 또한 여러 패러다임과,&amp;nbsp; 명령형, 객체지향, 메타프로그래밍 같은 다양한 프로그래밍 스타일을 지원한다. D는 C문법 계열 언어들의 일원이며, 그 외견은 C++과 매우 유사해 보인다. 여기(todo:번역예정)에 &lt;a title=&quot;[http://www.digitalmars.com/d/comparison.html]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.digitalmars.com/d/comparison.html&quot;&gt;특징&lt;/a&gt;의 목록이 있다.&lt;br /&gt;
&lt;br /&gt;
D는 기업적인 의도나 그 어떠한 프로그래밍 이론에도 지배되지 않는다. D가 나아가는 방향은 &lt;a title=&quot;[http://www.digitalmars.com/NewsGroup.html]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.digitalmars.com/NewsGroup.html&quot;&gt;D 프로그래밍 커뮤니티&lt;/a&gt;의 요구사항과 기여에 의해 정해진다.&lt;br /&gt;
&lt;br /&gt;
D언어에는 두 가지 버전이 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot;&gt;
&lt;li&gt;안정화된 버전 1&lt;/li&gt;
&lt;li&gt;차세대이며 현재 개발중인 버전 2&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
D의 구현은 현재 4가지가 존재한다.&lt;br /&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot;&gt;
&lt;li&gt;Digital Mars dmd 의 Windows, x86 Linux, Max OSX 10.5, x86 FreeBSD를 위한 ver 1, 2&lt;/li&gt;
&lt;li&gt;LLVM D 컴파일러 ver 1&lt;/li&gt;
&lt;li&gt;GNU D 컴파일러 GDC, Windows, Mac OSX를 포함한 몇몇 플랫폼을 위한 ver 1.30, 2.014&lt;/li&gt;
&lt;li&gt;D.NET 컴파일러 알파, ver 2&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
거대하며, 지속적으로 성장하고 있는 D 소스코드와 프로젝트들의 모음집은 dsource에 있다. 열거할수 없는 D 위키와 라이브러리, 도구, 미디어 관련 문서 등은 dlink에 있다.&lt;br /&gt;
&lt;br /&gt;
이 문서는 pdf로도 제공된다. 일본어, 포르투갈어 번역도 있다. 독일어 서적
&lt;a href=&quot;http://www.amazon.de/Programmieren-D-Einf%C3%BChrung-neue-Programmiersprache/dp/3939084697/&quot;&gt;Programming in D: Introduction to the new Programming Language&lt;/a&gt;
 이 출판되었다. 또한 일본어 서적
&lt;a href=&quot;http://www.gihyo.co.jp/books/syoseki-contents.php/4-7741-2208-4&quot;&gt;D Language Perfect Guide&lt;/a&gt;도 있다.&lt;br /&gt;
&lt;br /&gt;
이것은 D의 일부 기능성들의 실제 예를 보여주는 샘플이다.&lt;br /&gt;
&lt;br /&gt;
이하, 원문참조.&lt;br /&gt;
&lt;br /&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-10-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-10-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-10-2&quot; class=&quot;entry-ccl-nd&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black03.png&quot; alt=&quot;변경 금지&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>Programming D</category>
			<author>하늘색공책 하늘색 공책</author>
			<guid>http://azurenote.com/10</guid>
			<comments>http://azurenote.com/10#entry10comment</comments>
			<pubDate>Mon, 11 Jan 2010 01:05:27 +0900</pubDate>
		</item>
		<item>
			<title>클래스 멤버함수 포인터를 이용한, GPG4:1.8의 객체간 통신 구현의 한 가지.</title>
			<link>http://azurenote.com/9</link>
			<description>GPG4권의 C 구현은 메시지 수용 함수 내에 길다란 switch-case문을 늘어놓고 타입에 따라 해당 기능을 호출하도록 해
놓았다. 이 아이디어를 플래시 게임에 적용했을 때에는 함수를 일급 값으로 취급하는 액션스크립트의 특성상, 수용 클래스의
private 메소드를 리스트에 등록해놓고 메시지의 타입에 따라 호출하는 것으로 간단하게 구현할 수 있었다. 그러나 객체의 타입을 확실히 알지 못할 경우에도 메소드를 호출할 수 있는 액션스크립트에서는 별로 쓸모가 없는 시스템이었다.&lt;br /&gt;
&lt;br /&gt;
C++에서도 메소드 호출은 포인터의 다운캐스트(좋은 것은 아니지만)로 얼마든지 호출할 수 있다. 그러나 온라인게임에서 네트워크로 전달되는 메시지를 어떻게 처리해야 하는가 하는 문제에 직면해서는 결국 메시지 기반 시스템이 필요하다는 생각이 들었다. 액션스크립트에서 했던 것과 같은 방식을 사용하기로 하고, 클래스의 메소드를 맵에 등록시킬 수 있는지 여부를 확인해 보았다.&lt;br /&gt;
&lt;br /&gt;
간단하게 테스트 해본 결과, 잘 작동한다. 실제 구현을 보기로 하자.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
struct Message&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int ID;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int target;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int delay;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int type;&lt;br /&gt;
};&lt;br /&gt;
기본적으로 기반 메시지는 다음과 같은 구조를 가질 것이다. 이것만으로 전달할 수 있는 메시지도 있겠지만 대부분의 경우에는 이를 상속하는 구조체를 사용해야 할 것이다.&lt;br /&gt;
&lt;br /&gt;
그럼 실제로 이 메시지를 수용할 클래스의 정의를 보기로 하자.&lt;br /&gt;
&lt;br /&gt;
//header&lt;br /&gt;
struct Message;&lt;br /&gt;
class Spacecraft;&lt;br /&gt;
typedef void (__thiscall Spacecraft::*MessageReceiver) (Message*);&lt;br /&gt;
&lt;br /&gt;
class Spacecraft&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; : public Entity&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Spacecraft(void);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; virtual ~Spacecraft(void);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; virtual void receive(Message* msg);&lt;br /&gt;
&lt;br /&gt;
protected:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; std::map&amp;lt;int, MessageReceiver&amp;gt; receiver;&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; void onAdvance(Message* msg);&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//source&lt;br /&gt;
...&lt;br /&gt;
Spacecraft::Spacecraft(void)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; receiver[0] = &amp;amp;Spacecraft::onAdvance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Spacecraft::receive(Message* msg)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (receiver.find(msg-&amp;gt;type) == receiver.end())&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ( this-&amp;gt;*(receiver[msg-&amp;gt;type]) ) (msg);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Spacecraft::onAdvance(Message* msg)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // 우주선을 전진시킨다. 직접 위치값을 조작하든, 물리엔진을 쓰든.&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
현재 수용자 목록에 해당 메시지의 타입을 받는 수용자가 없다면 메소드는 그냥 리턴한다. 존재한다면, 수용자에 메시지를 넘기고 호출한다. 멤버 포인터를 호출할 때의 연산자에 주목하자. 메소드의 호출규약 __thiscall의 작동방식을 이해할 필요가 있다. C++ 클래스의 메소드는 묵시적으로 첫번째 인자에 클래스 자신, this를 받는다. 그러므로 메소드를 포인터로 호출하는데 this를 명시해주지 않으면 C2064 오류가 발생할 것이다. 오류에 대한 상세한 설명은 MSDN을 참고.&lt;br /&gt;
&lt;br /&gt;
이제 클래스의 생성자나 초기화 함수에서 메시지의 타입을 지정해 두면, 다음과 같은 방식으로 메시지를 전달할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ControlMessage m; // Message에서 파생된 구조체&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Spacecraft s;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; /*초기화 작업 및 인자설정 등등*/&lt;br /&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; s.receive( &amp;amp;m );&lt;br /&gt;
&lt;br /&gt;
같은 방식으로, Spacecraft에서 파생된 클래스에도 receive메소드의 호출로 해당 클래스 특유의 메시지 수용자를 호출할 수 있다. 다만 파생 클래스의 멤버 포인터는 Spacecraft가 아니라 파생클래스를 this로 인식한다는 점을 상기할 필요가 있다. 따라서 상위 클래스의 멤버 포인터로서 등록되려면 캐스팅이 필요하다. 이미 MessageReceiver로 멤버 포인터가 재정의되어 있으니 이것으로 캐스팅해주면 간단하다.&lt;br /&gt;
&lt;br /&gt;
//Spacecraft를 상속하는 클래스.&lt;br /&gt;
TestShip::TestShip(void)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; //메시지 타입이 1인 경우에 이를 호출한다.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; receiver[1] = (MessageReceiver) &amp;amp;TestShip::onTemp;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
void TestShip::onTemp(Message* msg)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // 뭔가를 한다.&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
}&lt;br /&gt;
&lt;br /&gt;
이제 준비가 끝났다. 이제 이 클래스들은 메시지와 수용자라는 단일한 창구로서 상호작용이 가능하다. 메시지가 키보드나 마우스 입력을 위한 것이든, 네트웍을 타고 오는 것이든, 단일한 메시지 타입만 정의되어 있다면 적절한 처리가 가능하다.&lt;br /&gt;
&lt;br /&gt;또한 리플레이 시스템을 만들 경우에도 메시지가 중앙 통제 객체를 통과해서 전달되도록 하면 도움이 될 것 같다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
추가적으로, 스크립트 언어를 사용한다면 메시지를 스크립트에 그대로 넘기고 스크립트의 조작을 받고 또 그 결과값을 받아오게 한다면, 굳이 파생클래스를 유도할 필요가 없이 스크립트로 다양한 파생 객체를 만들어 낼 수 있을 것이다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
클래스 멤버 포인터에 대해서는 다음 문서에 잘 정리되어 있다.&lt;br /&gt;
&lt;span class=&quot;wikiTitle&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://www.redwiki.net/wiki/wiki.php/%C7%D4%BC%F6%C6%F7%C0%CE%C5%CD?action=fullsearch&amp;amp;value=%C7%D4%BC%F6%C6%F7%C0%CE%C5%CD&amp;amp;MONIWIKI=6e34c2eadeb374cde9fb5e590964cc27&quot;&gt;&lt;/a&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;&lt;a href=&quot;http://www.redwiki.net/wiki/wiki.php/%C7%D4%BC%F6%C6%F7%C0%CE%C5%CD?action=fullsearch&amp;amp;value=%C7%D4%BC%F6%C6%F7%C0%CE%C5%CD&amp;amp;MONIWIKI=6e34c2eadeb374cde9fb5e590964cc27&quot;&gt;함수포인터&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://www.joinc.co.kr/modules/moniwiki/wiki.php/blank?action=fullsearch&amp;amp;value=blank]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.joinc.co.kr/modules/moniwiki/wiki.php/blank?action=fullsearch&amp;amp;value=blank&quot;&gt;C++ 에서 멤버 함수포인터 사용하기&lt;/a&gt;&lt;b&gt;&lt;a href=&quot;http://www.joinc.co.kr/modules/moniwiki/wiki.php/blank?action=fullsearch&amp;amp;value=blank&quot; class=&quot;wikiTitle&quot;&gt;&lt;span class=&quot;wikiTitle&quot;&gt;&lt;b&gt;
&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-9-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-9-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-9-2&quot; class=&quot;entry-ccl-nd&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black03.png&quot; alt=&quot;변경 금지&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>GPG</category>
			<category>게임프로그래밍</category>
			<author>하늘색공책 하늘색 공책</author>
			<guid>http://azurenote.com/9</guid>
			<comments>http://azurenote.com/9#entry9comment</comments>
			<pubDate>Sat, 02 Jan 2010 15:23:00 +0900</pubDate>
		</item>
		<item>
			<title>Box2D - 7.Shapes</title>
			<link>http://azurenote.com/6</link>
			<description>일러두기&amp;gt;진행중인 문서입니다. 대부분 완료되었습니다.&lt;br /&gt;
원문보기&amp;gt;&lt;a title=&quot;[http://www.box2d.org/wiki/index.php?title=Manual/AS3#Shapes]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.box2d.org/wiki/index.php?title=Manual/AS3#Shapes&quot;&gt;http://www.box2d.org/wiki/index.php?title=Manual/AS3#Shapes&lt;/a&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;h2&gt;&lt;span class=&quot;mw-headline&quot;&gt;About 개요&lt;br /&gt;
&lt;/span&gt;&lt;/h2&gt;모양은 강체에 붙여지는 충돌 도형이다. 또한 모양은 강체의 질량을 정의하는데 쓰이기도 한다. 이는 당신이 밀도를 명시하게 하고 Box2D가 질량을 계산하는작업을 맡는 것이다.[todo:의역제거]&lt;br /&gt;
&lt;br /&gt;
모양은 마찰과 탄성 속성을 갖는다. 그리고 특정한 게임 객체와의 충돌을 무시하는 필터링 정보를 갖고 있다.&lt;br /&gt;
&lt;br /&gt;
모양은 항상 강체에 의해 소유된다. 당신은 하나의 강체에 며러 개의 모양을 붙일 수 있다. 모양은 추상 클래스이며 다양한 형태의 모양이 Box2D에서 구현될 수 있다. 당신이 용사-_-라면 당신은 고유의 모양을 구현할 수 있다. (또한 충돌 알고리즘도.)&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&quot;The_Shape_Definition&quot;&gt;&lt;/a&gt;&lt;h2&gt; &lt;span class=&quot;mw-headline&quot;&gt;The Shape Definition 모양의 정의&lt;br /&gt;
&lt;/span&gt;&lt;/h2&gt;모양의 정의는 모양을 생성하기 위해 사용된다. 모양에서 공통되는 데이터는 b2ShapeDef가 가지고 있고 고유한 데이터는 파생 클래스가 갖고 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&quot;Friction_and_Restitution&quot;&gt;&lt;/a&gt;&lt;h2&gt; &lt;span class=&quot;mw-headline&quot;&gt;Friction and Restitution 마찰과 탄성&lt;br /&gt;
&lt;/span&gt;&lt;/h2&gt;마찰은 물체들이 서로 사실적으로 미끄러지도록 만드는 데 쓰인다. Box2D는 정적, 동적마찰을 지원하지만 양자는 같은 인수를 사용한다. 마찰은 Box2D에서 정확하게 시뮬레이트되며 마찰 강도는 법선 힘(이것은 &lt;span style=&quot;font-weight: bold;&quot;&gt;쿨롱 마찰&lt;/span&gt;이라고 불린다.)에 비례한다. 마찰 인수는 일반적으로 0과 1사이에서 설저된다. 0의 값은 마찰을 끄고 1의 값은 마찰을 강하게 한다. 두 모양 사이에서 마찰이 계산될 때 Box2D는 두 모양의 마찰 인수를 병합해야 한다. 이것은 다음 수식에 의해 완료된다.&lt;br /&gt;
&lt;br /&gt;

&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;

&lt;pre class=&quot;brush:as3&quot;&gt;var friction :Number = Math.sqrt(shape1.friction * shape2.friction);&lt;/pre&gt;

&lt;pre class=&quot;source-actionscript&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: 돋움; white-space: normal;&quot;&gt;탄성은 물체를 튕겨내는데 사용된다. 탄성 값은 일반적으로 0과 1 사이의 값으로 설정된다. 테이블에 공을 떨어트리는 것을 생각해보자. 0의 값은 공이 튀기지 않음을 의미한다. 이는 &lt;b&gt;비탄성&lt;/b&gt; 충돌이라 불린다. 1의 값은 공의 속도가 완전하게 반사됨을 의미한다. 이것은 &lt;b&gt;완전 탄성&amp;nbsp;&lt;/b&gt;충돌이라 불린다. 탄성은 다음 수식을 통해 합성된다.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/pre&gt;

&lt;pre class=&quot;brush:as3&quot;&gt;var restitution: Number = Math.Max(shape1.restitution, shape2.restitution);&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;모양이 복수의 충돌을 일으켰을 때 탄성은 간략하게 시뮬레이션된다. 이것은 Box2D가 반복적인 처리자를 사용하기 떄문이다. Box2D는 또한 충돌 속도가 작을 때에는 비탄성 충돌을 사용한다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;a name=&quot;Density&quot;&gt;&lt;/a&gt;&lt;h2&gt; &lt;span class=&quot;mw-headline&quot;&gt;Density 밀도&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Box2D는 강체에 붙여진 모양에 의해 암시된 질량의 분포를 사용해서&amp;nbsp;질량과 강체의 회전 관성을&amp;nbsp;선택적으로 계산한다. (todo:오역소지) 직접적으로 질량을 명시하는 것은 때때로 허접한 시뮬레이션을 만든다. 그러므로,&amp;nbsp;권장하는,&amp;nbsp;강체의 질량을 명시하는 방법은 모양의 밀도를 지정하고 강체에 붙여진 모든 모양에 대해 b2Body.setMessFromShape를 한번씩 호출하는 것이다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;a name=&quot;Filtering&quot;&gt;&lt;/a&gt;&lt;h2&gt; &lt;span class=&quot;mw-headline&quot;&gt;Filtering&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;충돌 필터링은 모양들 사이의 충돌을 방지하는 시스템이다. 예를 들어, 당신이 자전거를 타는 캐릭터를 만든다고 해보자. 당신은 자전거가 지형과 충돌하고, 캐릭터도 지형과 충돌하길 원한다. 그러나 캐릭터가 자전거와 충돌하길 원하지는 않을 것이다 (그것들은 겹쳐져 있어야 하니까.) Box2D는 그런 충돌을 카테고리와 그룹을 통해 필터링하는 것을 지원한다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;Box2D는 16개의 충돌 카테고리를 지원한다. 각 모양을 위해 당신은 어느 카테고리에 그것이 속할 것인지 지정할 수 있다. 또한 어떤 카테고리가 이 모양과 충돌할 수 있을지도 지정할 수 있다. 예를 들면, 당신은 모든 플레이어가 서로 충돌하지 않고 몬스터들도 서로 충돌하지 않지만 플레이어와 몬스터는 충돌해야 하는 다중사용자 게임을 정의할 수 있다. 이것은 &lt;b&gt;비트 마스크&lt;/b&gt;를 통해 이루어진다. 다음 예제를 보자.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;/p&gt;
&lt;pre class=&quot;brush:as3&quot;&gt;
playerShapeDef.filter.categoryBits = 0x0002;

monsterShapeDef.filter.categoryBits  = 0x0004;

playerShapeDef.filter.maskBits       = 0x0004;

monsterShapeDef.filter.maskBits      = 0x0002;
&lt;/pre&gt;



&lt;p&gt;충돌 그룹은 필수적인 그룹 인덱스를 명시해야 한다. 당신은 같은 인덱스를 가진 모든 모양들이 항상 충돌(양수 인덱스)하거나, 또는 절대 충돌하지 않(음수 인덱스)도록 할 수 있다. 그룹 인덱스들은 일반적으로, 자전거의 각 부품들처럼 어떻게든 관계가 있는 것들을 위해 사용된다. 다음 예제에서는, shape1과 shape2가 항상 충돌한다. 그러나 shape3과 shape4는 절대 충돌하지 않는다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;


&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;
&lt;pre class=&quot;brush:as3&quot;&gt;shape1Def.filter.groupIndex = 2;
shape2Def.filter.groupIndex = 2;
shape3Def.filter.groupIndex = -8;
shape4Def.filter.groupIndex = -8;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;다른 그룹 인덱스를 가진 모양들 사이의 충돌은 카테고리와 마스크 비트에 의해 걸러진다. 달리 말하면, 그룹 필터링은 그룹 필터링은 카테고리 필터링보다 선행한다는 것이다.&lt;/p&gt;
&lt;p&gt;다음은 Box2D에서 일어나는 추가적인 필터링의 목록이다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;정적 강체에 있는 모양은 다른 정적 강체의 모양과 절대 충돌하지 않는다.&lt;/li&gt;
&lt;li&gt;한 강체 안의 모양들은 절대 서로 충돌하지 않는다.&lt;/li&gt;
&lt;li&gt;당신은 조인트로 연결된 강체들의 모양이 서로 충돌할지 선택할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sometimes you might need to change collision filtering after a shape
has already been created. You can get and set the b2FilterData
structure on an existing shape using &lt;i&gt;b2Shape.GetFilterData&lt;/i&gt; and &lt;i&gt;b2Shape.SetFilterData&lt;/i&gt;. Box2D caches filtering results, so you must manually re-filter a shape using &lt;i&gt;b2World.Refilter&lt;/i&gt;.
&lt;/p&gt;
&lt;p&gt;때떄로 당신은 모양이 기존에 생성된 후에 충돌 필터링을 변경할 필요가 있을 것이다. 당신은 b2FilterData 구조체를 기존 모양의 b2Shape.GetFilterData와&amp;nbsp;b2Shape.SetFilterData를 통해 얻거나 지정할 수 있다. Box2D는 필터링 결과를 캐시해 두므로, 당신은 b2World.Refilter를 통해 수동으로 모양들을 다시 필터링할 필요가 있다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;a name=&quot;Sensors&quot;&gt;&lt;/a&gt;&lt;h2&gt; &lt;span class=&quot;mw-headline&quot;&gt;Sensors&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;때떄로 게임 로직은 아직 충돌 반응이 없을 때라도 언제 두 모양이 겹쳐졌는지를 알 필요가 있다. 이것은 센서를 통해 이루어진다. 센서는 충돌을 감지하지만 반응을 일으키지는 않는 모양의 하나이다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;You can flag any shape as being a sensor. Sensors may be static
or dynamic. Remember that you may have multiple shapes per body and you
can have any mix of sensors and solid shapes.
&lt;/p&gt;
&lt;p&gt;당신은 어떤 모양이든 센서로서 기능하는 플래그를 지정할 수 있다. 센서는 정적이거나 동적일 수 있다. 강체 하나가 복수의 모양을 가질 수 있으며, 센서와 일반적인 모양을 아무렇게든 섞을 수 있음을 기억하라.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;

&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;

&lt;pre class=&quot;brush:as3&quot;&gt;myShapeDef.isSensor = true;&lt;br /&gt;
&lt;br /&gt;
&lt;/pre&gt;

&lt;/div&gt;

&lt;a name=&quot;Circle_Definitions&quot;&gt;&lt;/a&gt;&lt;h2&gt; &lt;span class=&quot;mw-headline&quot;&gt;Circle Definitions 원의 정의&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;b2CicleDef는 b2ShapeDef를 확장하며 지역적 위치와 반지름을 추가한다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;

&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;

&lt;pre class=&quot;brush:as3&quot;&gt;var def:b2CircleDef;
def.radius = 1.5;
def.localPosition.Set(1.0, 0.0);
&lt;/pre&gt;


&lt;/div&gt;

&lt;h2&gt; &lt;span class=&quot;mw-headline&quot;&gt;Polygon Definitions 폴리곤의 정의&lt;/span&gt;&lt;/h2&gt;&lt;div&gt;
&lt;i&gt;b2PolyDef&lt;/i&gt; is used to implement convex polygons. They are a
bit tricky to use correctly, so please read closely. The maximum vertex
count is defined by &lt;i&gt;b2_maxPolyVertices&lt;/i&gt; which is currently 8. If you need to use more vertices, you must modify &lt;i&gt;b2_maxPolyVertices&lt;/i&gt; in file &lt;i&gt;b2Settings&lt;/i&gt;.&lt;/div&gt;
&lt;div&gt;
b2PolyDef는 볼록한 폴리곤을 구현한다. (todo:의불) 정점 수의 최대값은 b2_maxPolyVertices에 의해 정의되며 이 값은 현재 8이다. 만약 더 많은 정점을 필요로 한다면 b2Settings파일에 있는 b2_maxPolyVertices를 수정해야 한다.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;p&gt;When you build a polygon definition you must specify the number of vertices you will use. The vertices must be specified in &lt;b&gt;counter-clockwise&lt;/b&gt;
(CCW) order about the z-axis of a right-handed coordinate system. This
might turn out to be clockwise on your screen, depending on your
coordinate system conventions.
&lt;/p&gt;
&lt;p&gt;당신이 폴리곤의 정의를 구성할 때 사용할 정점의 갯수를 명시해야 한다. 정점들은 오른손 법칙 체계의 z축에 대해 시계반대방향 순서로 명시되어야 한다. 이것은 좌표체계의 방식에 의존하는 화면상에서는 결국 시계 반대 방향이 될 것이다. (todo:오역)&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;폴리곤은 반드시 볼록해야 한다. 달리 말하면, 각 정점은 일정 각도만큼 밖으로 향해야 한다. 마지막으로, 당신은 어떤 정점도 겹치지 않도록 해야 한다. Box2D는 자동적으로 루프를 끝낼 것이다.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.box2d.org/images/convex_concave.gif&quot; alt=&quot;convex_concave.gif&quot;&gt;
&lt;/p&gt;
&lt;p&gt;여기 삼각형을 이루는 폴리곤의 정의에 대한 예제가 있다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;

&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;
&lt;pre class=&quot;brush:as3&quot;&gt;var triangleDef:b2PolygonDef = b2PolygonDef()
triangleDef.vertexCount = 3
triangleDef.vertices[0].Set(-1.0, 0.0)
triangleDef.vertices[1].Set(1.0, 0.0)
triangleDef.vertices[2].Set(0.0, 2.0)
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;정점들은 부모 강체의 좌표체계 안에서 정의된다. 만약 당신이 상위 강체 안에서 폴리곤을 이동시키려면 단지 모든 정점을 이동시키면 된다.&lt;/p&gt;
&lt;p&gt;편의를 위해서 폴리곤을 상자로서 초기화하는 함수가 있다. 당신은 강체 원점에 중심을 두는 축 정렬 상자나 강체 원점에서 이동된 상자를 얻을 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;
&lt;pre class=&quot;brush:as3&quot;&gt;// aligned&lt;br /&gt;
&lt;br /&gt;
var alignedBoxDef:b2PolygonDef = new b2PolygonDef();&lt;br /&gt;
var hx:Number = 1.0; // half-width&lt;br /&gt;
var hy:Number = 2.0; // half-height&lt;br /&gt;
alignedBoxDef.SetAsBox(hx, hy);&lt;br /&gt;

// oriented
var orientedBoxDef:b2PolygonDef = new b2PolygonDef();
var center:b2Vec2 = new b2Vec2(-1.5, 0.0);
var angle:Number = 0.5 * b2Settings.b2_pi;
orientedBoxDef.SetAsOrientedBox(hx, hy, center, angle);
&lt;/pre&gt;&lt;/div&gt;
&lt;a name=&quot;Shape_Factory&quot;&gt;&lt;/a&gt;&lt;h2&gt; &lt;span class=&quot;mw-headline&quot;&gt;Shape Factory&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;모양들은 강체 정의의 초기화에 의해 생성되며 상위 강체의 정의에 전달된다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;

&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;
&lt;pre class=&quot;brush:as3&quot;&gt;var circleDef:b2CircleDef = new b2CircleDef();
circleDef.radius = 3.0;
circleDef.density = 2.5;
var myShape:b2Shape = myBody.CreateShape(circleDef);
//[선택적으로 어딘가에 모양 객체를 저장한다]
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;이것은 모양을 생성하고 강체에 붙인다. 당신은 모양의 포인터를 저장할 필요가 없다. 모양은 상위 강체가 파괴될 때 자동적으로 파괴되므로. (&lt;a href=&quot;http://www.box2d.org/wiki/index.php?title=Python_Manual#Implicit_Destruction&quot; title=&quot;Python Manual&quot; style=&quot;color: rgb(138, 138, 138) ! important; text-decoration: underline ! important;&quot;&gt;묵시적 파괴&lt;/a&gt;를 보라)&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;당신이 모양을 강체에 붙이는 작업을 마친 후, 당신은 강체의 질량을 자식 모양에 기반해 재계산하기를 원할 것이다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;

&lt;pre class=&quot;brush:as3&quot;&gt;myBody.SetMassFromShapes()
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;이 함수는 실행 비용이 크다. 그러므로 당신은 이것을 필요할 때에만 호출해야 한다.&lt;/p&gt;
&lt;p&gt;You can destroy a shape on the parent body easily. You may do
this to model a breakable object. Otherwise you can just leave the
shape alone and let the body destruction take care of destroying the
attached shapes.
&lt;/p&gt;
&lt;p&gt;당신은 상위 강체 위에서 모양을 쉽게 파괴할 수 있다. 당신은 파괴 가능한 물체를 만들 때 이를 행할 것이다. (todo:의불)&lt;/p&gt;

&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;
&lt;pre class=&quot;brush:as3&quot;&gt;myBody.DestroyShape(myShape)
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;강체로부터 모양이 삭제된 후, 당신은 SetMassFromShapes를 다시 호출하고 싶을 것이다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;a name=&quot;Using_a_Shape&quot;&gt;&lt;/a&gt;&lt;h2&gt; &lt;span class=&quot;mw-headline&quot;&gt;Using a Shape 모양의 사용&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;여기서 할 말은 많지 않다. 당신은 모양의 종류와 그 상위의 강체를 얻을 수 있다. 또한 한 점이 모양 위에 포함되는지를 보기 위해 테스트를 할 수도 있다. 자세한 것은 b2Shape.h를 보라.&lt;/p&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-6-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-6-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-6-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>Box2D AS3 매뉴얼</category>
			<author>하늘색공책 하늘색 공책</author>
			<guid>http://azurenote.com/6</guid>
			<comments>http://azurenote.com/6#entry6comment</comments>
			<pubDate>Wed, 25 Nov 2009 16:58:56 +0900</pubDate>
		</item>
		<item>
			<title>Box2D - 6.Bodies</title>
			<link>http://azurenote.com/5</link>
			<description>&lt;h1&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;lt;일러두기&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;&lt;h1&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;1&amp;gt;번역기 돌린것보다 조금 나은 수준이지만 의미전달에는 크게 무리가 없다고 생각합니다. 오역 지적, 좀더 나은 의견은 감사히 받습니다.&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;2&amp;gt;이 글은 아직 작업 진행중입니다. 최종수정 11월 18일&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&amp;lt;&lt;a title=&quot;[http://www.box2d.org/wiki/index.php?title=Manual/AS3#Bodies]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.box2d.org/wiki/index.php?title=Manual/AS3#Bodies&quot;&gt;원문보기&lt;/a&gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt; &lt;span class=&quot;mw-headline&quot;&gt;About 개요&lt;/span&gt;&lt;/h2&gt;&lt;br /&gt;
강체는 위치와 속도를 가지며, 당신은 강체에 힘과 토크, 충격량을 가할 수 있다. 강체는 정적이거나 동적일 수 있다. 정적 강체는 절대 움직이지 않으며 다른 정적 강체와 충돌하지도 않는다.&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;강체는 모양들의 기반이 되며, 강체는 모양들을 세계 안에서 이끌고 다닌다. 강체는 Box2D에서 항상 &lt;span style=&quot;font-weight: bold;&quot;&gt;강체&lt;/span&gt;이다.1) 이것은 같은 강체에 붙여진 두 모양이 절대로 서로 상대적인 이동을 할 수 없음을 의미한다.&lt;br /&gt;
&lt;/p&gt;
&lt;br /&gt;
당신은 일반적으로 당신이 만든 모든 강체의 포인터를 유지할 것이다. 이를 통해, 당신은 그래픽 엔티티의 위치를 갱신하기 위해, 강체의 위치를 확인할 수 있다. 또한 당신이 프로그램을 끝낼 때 모든 강체들을 제거하기 위해서도 그들 모두에 대한 포인터를 유지해야 한다. 2)&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt; &lt;span class=&quot;mw-headline&quot;&gt;Body Definition 강체의 정의&lt;br /&gt;
&lt;/span&gt;&lt;/h2&gt;&lt;br /&gt;
강체가 생성되기 전에 먼저 당신은 강체의 정의를 먼저 생성해야 한다 (b2BodyDef). 당신은 강체의 정의를 스택에 생성하거나 당신의 게임의 자료구조 안에 정리해 둘 수 있다. 선택은 당신의 몫이다.Box2D는 강체의 정의 결과를 복사하며, 그에 대한 포인터를 유지하지 않는다. 이것은 당신이 강체의 정의를 여러 개의 강체를 생성하는 &lt;br /&gt;
데 재사용할 수 있음을 의미한다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
강체 정의의 몇몇 중요한 멤버를 보러 가자.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt; &lt;span class=&quot;mw-headline&quot;&gt;Mass Properties 중량 속성&lt;br /&gt;
&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;강체의 중량 속성을 확정하는 데는 몇 가지 방법이 있다.&lt;br /&gt;
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;강체의 정의에 중량 속성을 명시적으로 지정한다.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;강체가 생성된 후 강체의 중량 속성을 명시적으로 지정한다.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;강체에 붙여진 모양들의 밀도에 기반해 중량을 정한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;많은 게임 시나리오에서는 모양의 밀도에 기반해 중량을 계산한다. 이것은 강체가 일관성있게 적당한 중량을 갖는 것을 보증한다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;그러나 그렇지 않은 게임 시나리오는 특정한 중량 값을 필요로 할 것이다. 예를 들면, 당신은 저울처럼 정확한 중량을 갖도록 조절할 필요가 있는 메커니즘을 사용하는 경우처럼.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;You can explicitly set the mass properties in the body definition as follows:&lt;/p&gt;
당신은 다음과 같이 강체 정의의 중량을 명시적으로 설정할 수 있다.&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;&lt;/span&gt;&lt;pre class=&quot;source-actionscript&quot;&gt;&lt;br /&gt;
bodyDef.&lt;span class=&quot;me1&quot;&gt;massData&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;mass&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;2.0&lt;/span&gt;;             &lt;span class=&quot;co1&quot;&gt;// 킬로그램 단위 강체 중량&lt;/span&gt;&lt;br /&gt;
bodyDef.&lt;span class=&quot;me1&quot;&gt;massData&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;center&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;SetZero&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;       &lt;span class=&quot;co1&quot;&gt;// 지역적 질량중심&lt;/span&gt;&lt;br /&gt;
bodyDef.&lt;span class=&quot;me1&quot;&gt;massData&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;I&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;3.0&lt;/span&gt;;                &lt;span class=&quot;co1&quot;&gt;// 회전 관성 in kg*m^2.&lt;/span&gt;&lt;br /&gt;
&lt;/pre&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&lt;/span&gt;중량을 설정하는 다른 방법들은 본문의 다른 곳에서 소개할 것이다.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;
&lt;/div&gt;
&lt;h2&gt;&lt;span class=&quot;mw-headline&quot;&gt;Position and Angle 위치와 각도&lt;br /&gt;
&lt;/span&gt;&lt;/h2&gt;강체 정의는 당신에게 강체 생성시의 위치를 초기화할 기회를 준다. 이것은 세계의 원점에 강체를 생성한 후 이동하는 것보다 나은 퍼포먼스를 보인다.&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;강체는 두 개의 흥미로운 정점을 갖는다. 첫째는 강체의 &lt;span style=&quot;font-weight: bold;&quot;&gt;원점&lt;/span&gt;이다. 모양들과 조인트는 강체의 원점에 상대적으로 붙여져 있다. 두 번째 흥미로운 정점은 &lt;span style=&quot;font-weight: bold;&quot;&gt;질량중심&lt;/span&gt;이다. 질량중심은 강체에 붙여진 모양들의 질량 분포에서 결정되거나, b2MassData를 통해 명시적으로 지정할 수 있다. Box2D의 내부적 연산 대부분은 질량 중심을 사용한다. 예를들면 b2Body는 질량중심을 위해 선형 속도를 저장한다.(For example &lt;i&gt;b2Body&lt;/i&gt; stores the linear velocity for the center of mass.)&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
당신이 강체 정의를 구성할 때는 질량중심이 어디에 위치할 것인지 알지 못할 것이다. 그러므로 당신은 강체의 원점을 질량중심으로서 간주한다(오역소지). 또한 강체의 각도를 라디안으로 지정할 것이다. 이는 질량중심의 위치에 영향을 받지 않는다.&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;당신이 나중에 강체의 중량을 변경한다면 질량중심이 강체 위에서 이동할 것이다. 그러나 원점은 움직이지 않으며 붙여진 모양과 조인트들도 움직이지 않는다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;
&lt;div style=&quot;border: 1px dashed rgb(204, 204, 204); padding: 10px; background-color: rgb(255, 255, 255);&quot;&gt;
&lt;pre class=&quot;source-actionscript&quot;&gt;bodyDef.&lt;span class=&quot;kw3&quot;&gt;position&lt;/span&gt;.&lt;span class=&quot;kw3&quot;&gt;Set&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;0.0&lt;/span&gt;, &lt;span class=&quot;nu0&quot;&gt;2.0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;; &lt;span class=&quot;co1&quot;&gt;// 강체의 원래 위치.&lt;/span&gt;&lt;br /&gt;
bodyDef.&lt;span class=&quot;me1&quot;&gt;angle&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;0.25&lt;/span&gt; * b2Settings.&lt;span class=&quot;me1&quot;&gt;b2_pi&lt;/span&gt;; &lt;span class=&quot;co1&quot;&gt;// 호도법상 강체의 각도.&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;&lt;br /&gt;
&lt;span class=&quot;mw-headline&quot;&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span class=&quot;mw-headline&quot;&gt;Damping 제동&lt;br /&gt;
&lt;/span&gt;&lt;/h2&gt;제동은 강체의 속도를 줄이는 데 사용된다. 제동은 마찰과는 별개인데, 왜냐하면 마찰은 오직 충돌시에만 일어나고 제동은 마찰보다 시뮬레이션 비용이 적게 든다. 그러나 제동은 마찰을 대체할 수 없으며 두 가지 효과는 함께 사용되어야 한다.&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;제동 인자는 0과 무한대 사이에 있어야 한다. 0은 제동을 하지 않음을 의미하고 무한대는 최대한 제동을 거는 것을 의미한다. 일반적으로 당신은 0~1.0사이의 제동 값을 사용할 것이다. 나는 일반적으로 선형 제동을 사용하지 않는데 이것은 강체가 &lt;span style=&quot;font-weight: bold;&quot;&gt;떠다니는 것처럼&lt;/span&gt; 보이기 떄문이다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;
&lt;pre class=&quot;source-actionscript&quot;&gt;bodyDef.&lt;span class=&quot;me1&quot;&gt;linearDamping&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;0.0&lt;/span&gt;;&lt;br /&gt;
bodyDef.&lt;span class=&quot;me1&quot;&gt;angularDamping&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;0.1&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;/pre&gt;&lt;/div&gt;
제동은 안정성과 퍼포먼스를 위해 근사된다. 작은 제동 값에서 제동 효과는 대개 타임스텝에서 독립적이다. 보다 큰 제동 값에서 제동 효과는 타임스텝에 따라 달라질 것이다. 이것은 당신이 고정된 타임스텝을 사용할 경우에는 별 문제가 되지 않는다. (이를 권장한다.)&lt;br /&gt;
&lt;h2&gt;&lt;br /&gt;
 &lt;span class=&quot;mw-headline&quot;&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span class=&quot;mw-headline&quot;&gt;Sleep Parameters 수면 인자&lt;br /&gt;
&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;What does sleep mean? Well it is expensive to simulate bodies, sothe less we have to simulate the better. When a body comes to rest wewould like to stop simulating it. &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;수면이란 무엇을 의미하는가? 글쎄, 이것은 강체를 시뮬레이션하는 것의 확장이며, ....강체가 휴지상태가 될 때 우리는 그것을 시뮬레이션하지 않을 것이다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
Box2D가 강체(또는 강체의 묶음)을 휴지 상태로 만들 때 강체는 매우 작은 CPU오버헤드를 갖는 수면 상태로 들어간다. 만약 살아 움직이는 강체가 잠든 강체와 충돌한다면 잠든 강체가 깨어난다. 또한 강체들은 그들에게 붙여진 조인트나 컨택트가 파괴될 때도 깨어난다. 또한 당신은 수동으로 강체를 깨어나게 할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
강체의 정의는 당신을 강체가 잠들 수 있는지, 그리고 강체가 수면 상태에서 생성될지 명시하도록 한다.&lt;br /&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;
&lt;pre class=&quot;source-actionscript&quot;&gt;bodyDef.&lt;span class=&quot;me1&quot;&gt;allowSleep&lt;/span&gt; = &lt;span class=&quot;kw2&quot;&gt;true&lt;/span&gt;;&lt;br /&gt;
bodyDef.&lt;span class=&quot;me1&quot;&gt;isSleeping&lt;/span&gt; = &lt;span class=&quot;kw2&quot;&gt;false&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;&lt;br /&gt;
 &lt;span class=&quot;mw-headline&quot;&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span class=&quot;mw-headline&quot;&gt;Bullets 탄환&lt;br /&gt;
&lt;/span&gt;&lt;/h2&gt;게임 시뮬레이션은 보통 약간의 프레임 레이트 안에 재생되는 이미지들의 시퀀스를 생성한다. 이런 설정에서 강체는 한 타임스텝 안에서 먼 거리를 이동할 수 도 있다. 만약 물리 엔진이 큰 동작을 지원하지 않는다면 당신은 몇몇 물체들이 부정확하게 서로를 통과해버리는 것을 보게 될 것이다. 이런 효과를 &lt;span style=&quot;font-weight: bold;&quot;&gt;터널링&lt;/span&gt;이라고 부른다.&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;기본적으로, Box2D는 동적인 강체들이 정적인 강체를 통과하는 터널링을 예방하기 위해 지속적 충톨탐색(continuous collision detection; CCD)를 사용한다. 이것은 모양들이 그들의 이전 위치에서 다음 위치까지 휩쓸고 지나감으로서 실행된다. 엔진은 휩쓰는 동안에 새로운 충돌을 찾는다. 그리고 그 충돌들을 위해 충돌지점(time of impact;TOI)를 계산한다. 강체들은 그들의 첫번째 TOI로 이동하고 최초 타임스텝의 끝까지 시뮬레이트한다. 이 처리 과정은 필요에 따라 반복된다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
일반적으로 CCD는 동적 강체들 간에는 사용되지 않는다. 이것은 퍼포먼스를 유지하기 위해서이다. 몇몇 게임 시나리오에서 당신은 동적 강체에서도 CCD를 필요로 할 것이다. 예를 들면, 당신은 고속의 탄환을 얇은 벽을 향해 발사하는 것을 원할 수도 있다. CCD가 없으면 탄환은 탄환은 벽에 구멍에 난 듯 통과해 버릴 것이다. (역주 : 의역 - the bullet my tunnel through thewall)&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;고속으로 이동하는 물체를 Box2D에서는 탄환이라 불린다. 당신은 당신의 게임 디자인을 기반으로 어떤 강체가 탄환이 될 것인지 결정해야 한다. 만약 당신이 어떤 강체를 탄환으로 취급하기로 결정했다면 다음과 같은 설정을 사용하라.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;
&lt;pre class=&quot;source-actionscript&quot;&gt;bodyDef.&lt;span class=&quot;me1&quot;&gt;isBullet&lt;/span&gt; = &lt;span class=&quot;kw2&quot;&gt;true&lt;/span&gt;;&lt;br /&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;탄환 플래그는 동적 강체에만 적용된다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;CCD를 사용하는 대가는 비싸고 따라서 당신은 아마 모든 움직이는 강체를 탄환으로 취급하기를 원하지 않을 것이다. 그래서 기본적으로 Box2D는 CCD를 움직이는 강체와 정적 강체 사이에서만 사용한다. 이것은 강체가 당신의 게임 세계에서 벗어나지 않도록 예방하는 효과적인 접근방법 중 하나이다. 그러나 당신은 항상 CCD를 필요로 하는 몇몇 고속이동 강체를 갖고 있을 수도 있다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;h2&gt; &lt;span class=&quot;mw-headline&quot;&gt;Body Factory 강체 팩토리&lt;/span&gt;&lt;/h2&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;강체는 세계 클래스에서 제공되는 강체 팩토리에 의해 생성되고 파괴된다. 이것은 세계가 효과적인 할당자를 사용해 강체를 생성하고 세계 자료구조에 추가하도록 한다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;강체는 질량 속성에 의해 동적이거나 정적일 수 있다. 둘 다 같은 생성/파괴 메소드를 사용한다.&lt;br /&gt;
&lt;/p&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;
&lt;pre class=&quot;source-actionscript&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; dynamicBody:b2Body = myWorld.&lt;span class=&quot;me1&quot;&gt;CreateBody&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;bodyDef&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;//... do stuff ...&lt;/span&gt;&lt;br /&gt;
myWorld.&lt;span class=&quot;me1&quot;&gt;DestroyBody&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;dynamicBody&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;
dynamicBody = &lt;span class=&quot;kw2&quot;&gt;null&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;
정적 강체는 다른 강체의 영향에 의해서는 움직이지 않는다. 당신은 수동으로 정적 강체를 이동할 수 있지만, 동적 강체가 두 정적 강체 사이에서 찌그러지지 않도록 주의해야 한다. 마찰은 당신이 정적 강체를 이동하는 때는 정확하게 동작하지 않을 것이다. &lt;span style=&quot;color: rgb(142, 142, 142);&quot;&gt;&lt;span style=&quot;color: rgb(194, 194, 194);&quot;&gt;정적 강체는 스스로 시뮬레이트되지 않으&lt;/span&gt;며&lt;/span&gt; 결코 다른 정적 강체와 충돌을 발생시키지도 않는다. 하나의 정적강체에 몇 개의 모양을 붙이는 것이 하나의 모양을 가진 여러개의 정적 강체를 생성하는 것보다 빠르다. 내부적으로, Box2D는 정적 강체의 질량/질량 역수를 0으로 설정한다. 이것은 수학연산을 종료시키고 대부분의 알고리즘이 정적 강체를특수한 케이스로서 취급할 필요가 없게 한다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
Box2D는 강체 정의에 대한 참조나 그것을 유지하기 위한 어떤 데이터도 갖지 않는다.(유저데이터에 대한 포인터는 예외). 그러므로 당신은 임시적인 강체 정의를 생성하거나 같은 강체의 정의를 재사용할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Box2D는 당신이 b2World객체를 삭제함으로서 강체를 일일이 삭제할 필요를 없게 해주며, 이것은 당신을 위해 완벽한 정리작업을 해준다. 그러나 당신은 당신의 게임엔진 안에서 모든 강체에 대한 참조를 무효화해둬야 함을 유의해야 한다.&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;당신이 강체를 파괴했을 때, 붙여진 모양들과 조인트들은 자동적으로 파괴된다. 이것은 당신이 모양과 조인트 포인터를 어떻게 관리해야 하는지에 대한 중요한 의미를 내포하고 있다. 상세한 것은 &lt;a target=&quot;_blank&quot; href=&quot;http://www.box2d.org/manual.html#implicit_destruction&quot;&gt;&lt;/a&gt;&lt;a title=&quot;[http://www.box2d.org/wiki/index.php?title=Python_Manual#Implicit_Destruction]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.box2d.org/wiki/index.php?title=Python_Manual#Implicit_Destruction&quot;&gt;9.2절 묵시적 파괴&lt;/a&gt;를 참고하라.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
당신은 그라운드와 동적 강체를 조인트로 연결하려 할지도 모른다. 당신은 정적 강체와 연결하는 조인트가 필요할 것이다. 만약 정적 강체를 갖고 있지 않다면 당신은 공유되는 그라운드 강체를 세계 객체로부터 얻을 수 있다. 당신은 정적인 모양을 그라운드 강체에 붙일 수도 있다.&lt;br /&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;
&lt;pre class=&quot;source-actionscript&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; ground:b2Body = myWorld.&lt;span class=&quot;me1&quot;&gt;GetGroundBody&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;//... 그라운드 강체를 사용한 조인트 생성 ...&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt; &lt;span class=&quot;mw-headline&quot;&gt;Using a Body 강체의 사용&lt;/span&gt;&lt;/h2&gt;강체를 생성한 후에는, 당신이 강체를 동작하게 하는데 쓸 수 있는 여러 연산들이 있다. 그것은 질량 속성을 지정하는 것, 위치와 속도에 접근, 힘의 적용, 점과 벡터를 변환하는 것들을 포함한다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt; &lt;span class=&quot;mw-headline&quot;&gt;Mass Data 질량&lt;br /&gt;
&lt;/span&gt;&lt;/h2&gt;당신은 실행 시간에 강체의 질량값을 조절할 수 있다. 이것은 일반적으로 당신이 강체에서 모양을 생성하거나 파괴할 때 완료된다. 당신은 현재의 모양들에 기반해 강체의 질량을 설정하길 원할 것이다. &lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;
&lt;pre class=&quot;source-actionscript&quot;&gt;&lt;br /&gt;
b2Body.&lt;span class=&quot;me1&quot;&gt;SetMassFromShapes&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;:&lt;span class=&quot;kw3&quot;&gt;void&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;또한 당신은 직접 질량을 설정하길 원할수도 있다. 예를 들면, 당신이 직접 모양을 변경하지만 당신 고유의 질량 수식을 사용하려는 것처럼.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;
&lt;pre class=&quot;source-actionscript&quot;&gt;b2Body.&lt;span class=&quot;me1&quot;&gt;SetMass&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;massData:b2MassData&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;:&lt;span class=&quot;kw3&quot;&gt;void&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;/pre&gt;&lt;/div&gt;
강체의 질량은 다음 함수를 통해 사용할 수 있다.&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;
&lt;pre class=&quot;source-actionscript&quot;&gt;b2Body.&lt;span class=&quot;me1&quot;&gt;GetMass&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;:&lt;span class=&quot;kw3&quot;&gt;Number&lt;/span&gt;;&lt;br /&gt;
b2Body.&lt;span class=&quot;me1&quot;&gt;GetInertia&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;:&lt;span class=&quot;kw3&quot;&gt;Number&lt;/span&gt;;&lt;br /&gt;
b2Body.&lt;span class=&quot;me1&quot;&gt;GetLocalCenter&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;:b2Vec;&lt;br /&gt;
&lt;br /&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt; &lt;span class=&quot;mw-headline&quot;&gt;State Information 상태 정보&lt;br /&gt;
&lt;/span&gt;&lt;/h2&gt;강체의 상태에는 여러가지 국면이 있다. 당신은 이 상태 데이터에 다음 함수들을 사용해 효과적으로 접근할 수 있다.&lt;br /&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;
&lt;pre class=&quot;source-actionscript&quot;&gt;b2Body.&lt;span class=&quot;me1&quot;&gt;IsBullet&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;:&lt;span class=&quot;kw3&quot;&gt;Boolean&lt;/span&gt;;&lt;br /&gt;
b2Body.&lt;span class=&quot;me1&quot;&gt;SetBullet&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;flag:&lt;span class=&quot;kw3&quot;&gt;Boolean&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;:&lt;span class=&quot;kw3&quot;&gt;void&lt;/span&gt;;&lt;br /&gt;
b2Body.&lt;span class=&quot;me1&quot;&gt;IsStatic&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;:&lt;span class=&quot;kw3&quot;&gt;Boolean&lt;/span&gt;&lt;br /&gt;
b2Body.&lt;span class=&quot;me1&quot;&gt;IsDynamic&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;:&lt;span class=&quot;kw3&quot;&gt;Boolean&lt;/span&gt;;&lt;br /&gt;
b2Body.&lt;span class=&quot;me1&quot;&gt;IsFrozen&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;:&lt;span class=&quot;kw3&quot;&gt;Boolean&lt;/span&gt;;&lt;br /&gt;
b2Body.&lt;span class=&quot;me1&quot;&gt;IsSleeping&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;:&lt;span class=&quot;kw3&quot;&gt;Boolean&lt;/span&gt;;&lt;br /&gt;
b2Body.&lt;span class=&quot;me1&quot;&gt;AllowSleeping&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;flag:&lt;span class=&quot;kw3&quot;&gt;Boolean&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;:&lt;span class=&quot;kw3&quot;&gt;void&lt;/span&gt;;&lt;br /&gt;
b2Body.&lt;span class=&quot;me1&quot;&gt;WakeUp&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;:&lt;span class=&quot;kw3&quot;&gt;void&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;The bullet state is described in &lt;a href=&quot;http://www.box2d.org/wiki/index.php?title=Manual/AS3#Bullets&quot; title=&quot;&quot;&gt;Bullets&lt;/a&gt;. The frozen state is described in &lt;a href=&quot;http://www.box2d.org/wiki/index.php?title=Manual/AS3#World_Boundary&quot; title=&quot;&quot;&gt;World Boundary&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;탄환 상태는 탄환일 경우에만 기술된다. 냉각 상태는 세계 경계 밖에 있을 때 기술된다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;h2&gt; &lt;span class=&quot;mw-headline&quot;&gt;Position and Velocity 위치와 속도&lt;br /&gt;
&lt;/span&gt;&lt;/h2&gt;당신은 강체의 위치와 회전값에 접근할 수 있다. 이것은 일반적으로 당신의 게임 액터가 렌더링 될 때 이다. 또, 당신이 평범하게 이동을 시뮬레이션 하는 데 Box2D를 사용하는 이상 흔하지 않은 경우이지만. 위치를 지정할 수 도 있다.&lt;p&gt;&lt;br /&gt;
 &lt;/p&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;
&lt;pre class=&quot;source-actionscript&quot;&gt;SetXForm&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kw3&quot;&gt;position&lt;/span&gt;:b2Vec2, angle:&lt;span class=&quot;kw3&quot;&gt;Number&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;:&lt;span class=&quot;kw3&quot;&gt;Boolean&lt;/span&gt;;&lt;br /&gt;
GetXForm&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;:b2XForm;&lt;br /&gt;
GetPosition&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;:b2Vec2;&lt;br /&gt;
GetAngle&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;:&lt;span class=&quot;kw3&quot;&gt;Number&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;/pre&gt;&lt;/div&gt;
당신은 세계 좌표 위에서의 질량중심에 접근할 수 있다. Box2D의 내부적인 시뮬레이션 대부분은 질량중심을 사용한다. 그러나 당신은 일반적으로는 이에 접근할 필요가 없다. 대신 당신은 보통 강체의 변환값을 가지고 작업하게 될 것이다.&lt;br /&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;
&lt;pre class=&quot;source-actionscript&quot;&gt;GetWorldCenter&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;:b2Vec2;&lt;br /&gt;
&lt;br /&gt;
&lt;/pre&gt;&lt;/div&gt;
당신은 선형속도와 각속도에 접근할 수 있다. 선형 속도는 질량중심을 위한 것이다.&lt;br /&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;
&lt;pre class=&quot;source-actionscript&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; SetLinearVelocity&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;v:b2Vec2&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;:&lt;span class=&quot;kw3&quot;&gt;void&lt;/span&gt;;&lt;br /&gt;
&lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; GetLinearVelocity&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;:b2Vec2;&lt;br /&gt;
&lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; SetAngularVelocity&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;omega:&lt;span class=&quot;kw3&quot;&gt;Number&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;:&lt;span class=&quot;kw3&quot;&gt;void&lt;/span&gt;;&lt;br /&gt;
&lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; GetAngularVelocity&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;:&lt;span class=&quot;kw3&quot;&gt;Number&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt; &lt;span class=&quot;mw-headline&quot;&gt;Forces and Impulses 힘과 충격량&lt;br /&gt;
&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;You can apply forces, torques, and impulses to a body. When youapply a force or an impulse, you provide a world point where the loadis applied. This often results in a torque about the center of mass.&lt;/p&gt;
&lt;p&gt;당신은 힘과 토크, 충격량을 강체에 적용할 수 있다. 상신이 힘이나 충격량을 적용할 때 당신은 이 부하가 적용될 세계 좌표를 지정해야 한다. 이것은 토크의 경우 대개 질량 중심에 해당한다.This often results in a torque about the center of mass. [todo:의역제거]&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;
&lt;pre class=&quot;source-actionscript&quot;&gt;ApplyForce&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;force:b2Vec2, point:b2Vec2&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;:&lt;span class=&quot;kw3&quot;&gt;void&lt;/span&gt;;&lt;br /&gt;
ApplyTorque&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;float32 torque&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;:&lt;span class=&quot;kw3&quot;&gt;void&lt;/span&gt;;&lt;br /&gt;
ApplyImpulse&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;impulse:b2Vec2, point:b2Vec2&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;:&lt;span class=&quot;kw3&quot;&gt;void&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Applying a force, torque, or impulse wakes the body. Sometimes thisis undesirable. For example, you may be applying a steady force and want to allow the body to sleep to improve performance. In this caseyou can use the following code.&lt;/p&gt;
&lt;p&gt;힘과 토크 또는 충격의 적용은 강체를 깨운다. 때떄로 이것은 바람직하지 않다. 예를 들면, 당신은 지속적인 힘을 적용하고 ....[todo:빠진것]&lt;/p&gt;
&lt;p&gt;이 경우에 당신은 다음과 같은 코드를 사용할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;
&lt;pre class=&quot;source-actionscript&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;myBody.&lt;span class=&quot;me1&quot;&gt;IsSleeping&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; == &lt;span class=&quot;kw2&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
    myBody.&lt;span class=&quot;me1&quot;&gt;ApplyForce&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;myForce, myPoint&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;
&lt;span class=&quot;br0&quot;&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt; &lt;span class=&quot;mw-headline&quot;&gt;Coordinate Transformations 좌표변환&lt;br /&gt;
&lt;/span&gt;&lt;/h2&gt;강체 클래스는 지역공간과 세계공간 사이에서 점과 벡터를 변환하는데 도움을 주는 유틸리티 함수를 몇 개 갖고 있다. 만약 당신이 이 개념을 이해하지 못한다면, Jim Val Verth와 Lars Bishop이 쓴 &quot;게임과 상호작용적 애플리케이션을 위한 수학의 정수;Essential Mathematics for Games and Interactive Applications&quot;를 읽기 바란다. 이들 함수는 효율적이므로 이들의 사용에는 비용이 들지 않는다.&lt;br /&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;
&lt;pre class=&quot;source-actionscript&quot;&gt;GetWorldPoint&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;localPoint:b2Vec2&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;:b2Vec2;&lt;br /&gt;
GetWorldVector&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;localVector:b2Vec2&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;:b2Vec2;&lt;br /&gt;
GetLocalPoint&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;worldPoint:b2Vec2&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;:b2Vec2;&lt;br /&gt;
GetLocalVector&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;worldVector:b2Vec2&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;:b2Vec2;&lt;br /&gt;
&lt;br /&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt; &lt;span class=&quot;mw-headline&quot;&gt;Lists 열거&lt;br /&gt;
&lt;/span&gt;&lt;/h2&gt;당신은 강체의 모양들을 열거할 수 있다. 이것은 주로 모양의 사용자 데이터에 접근할 필요가 있을 때 유용하다.&lt;br /&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;
&lt;pre class=&quot;source-actionscript&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; s:b2Shape = body.&lt;span class=&quot;me1&quot;&gt;GetShapeList&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;; s; s = s.&lt;span class=&quot;me1&quot;&gt;GetNext&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
    &lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;data&lt;/span&gt;:MyShapeData = s.&lt;span class=&quot;me1&quot;&gt;GetUserData&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; as MyShapeData;&lt;br /&gt;
    ... &lt;span class=&quot;kw1&quot;&gt;do&lt;/span&gt; something &lt;span class=&quot;kw3&quot;&gt;with&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;data&lt;/span&gt; ...&lt;br /&gt;
&lt;span class=&quot;br0&quot;&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
강체의 조인트 목록도 비슷한 방식으로 열거할 수 있다.&lt;br /&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;역주-&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Body는 엄밀히 말해서 굳고 무른 정도에 관계없이 물체를 지칭하지만 적당한 대안 단어가 없고, Box2D안에서 모든 물체는 모든 힘에 대해 형태가 변하지 않는 강체이기 떄문에 처음부터 Body를 강체로 번역했다.&lt;/li&gt;
&lt;li&gt;ActionScript 버전은 해당되지 않는 내용이다.&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-5-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-5-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-5-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>Box2D AS3 매뉴얼</category>
			<category>Flash</category>
			<category>물리엔진</category>
			<category>플래시</category>
			<author>하늘색공책 하늘색 공책</author>
			<guid>http://azurenote.com/5</guid>
			<comments>http://azurenote.com/5#entry5comment</comments>
			<pubDate>Sat, 24 Oct 2009 00:25:03 +0900</pubDate>
		</item>
		<item>
			<title>Box2D - 9.Contacts</title>
			<link>http://azurenote.com/4</link>
			<description>&lt;h1&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;lt;일러두기&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;&lt;h1&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;번역기 돌린것보다 조금 나은 수준이지만 의미전달에는 크게 무리가 없다고 생각합니다. 오역 지적, 좀더 나은 의견은 감사히 받습니다.&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;span class=&quot;mw-headline&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;lt;&lt;a title=&quot;[http://www.box2d.org/wiki/index.php?title=Manual/AS3#Contacts]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.box2d.org/wiki/index.php?title=Manual/AS3#Contacts&quot;&gt;원문보기&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt; &lt;span class=&quot;mw-headline&quot;&gt;About&lt;/span&gt;&lt;/h2&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;&amp;lt;Contact&amp;gt;는 모양들 간의 충돌을 관리하기 위한 Box2D객체이다. 서로 다른 종류의 모양들 사이의 접촉을 관리하기 위해 b2Contact에서 파생된 서로 다른 종류의 몇 가지 컨택트가 존재한다. 예를들면 다각형-다각형 충돌을 관리하는 클래스와 원-원의 충돌을 관리하는 클래스가 있다. 이것들은 보통 당신에게는 중요하지 않지만, 적어도 당신이 알고 있을 필요는 있다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;다음에 몇가지 컨택트와 관련된 몇가지 용어가 있다. 이들은 Box2D 특유의 것이지만, 당신은 다른 물리엔진에서도 비슷한 용어들을 찾을 수 있을 것이다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;dl&gt;&lt;dt&gt; 접점&lt;/dt&gt;&lt;dd&gt; 접점은 두 모양이 접한 위치의 정점이다. 사실 객체들은 표면이 접했을 때 겹치게 되어 있다. Box2D는 적은 수의 접점으로 컨택트를 근사한다.&lt;/dd&gt;&lt;dt&gt; 컨택트 법선&lt;/dt&gt;&lt;dd&gt;컨택트 법선은 접점을 기준으로 shape1에서 shape2로 향하는 단위 벡터이다.&lt;/dd&gt;&lt;dt&gt; 컨택트 분리&lt;/dt&gt;&lt;dd&gt;분리는 관통의 반대이다, 분리는 모양들이 겹칠 때 음수가 된다. Box2D의 향후 버전에서는 양의 분리를 갖는 접점이 생성되도록 바뀔 수 있다. 따라서, 당신은 접점이 보고되었을 때 부호를 체크해야 할 지도 모른다.&lt;br /&gt;
&lt;/dd&gt;&lt;dt&gt;법선 힘&lt;/dt&gt;&lt;dd&gt;Box2D는 상호작용적인 충돌처리기를 사용하고 충돌점을 결과와 함께 저장한다. 당신은 충돌 강도를 측정하는 데 안전하게 법선 힘을 사용할 수 있다. 예를 들면, 당신은 법선 힘을 부서지는 물체들에 대해 이벤트를 트리거하거나 충돌 사운드를 재생하는 데 사용할 수 있다.&lt;/dd&gt;&lt;dt&gt; 탄젠트 힘&lt;/dt&gt;&lt;dd&gt;탄젠트 힘은 충돌 처리기의 마찰력에 대한 근사값이다.&lt;br /&gt;
&lt;/dd&gt;&lt;dt&gt;충돌 ID&lt;/dt&gt;&lt;dd&gt;Box2D는 최초 타임스텝으로부터 추정된 충돌 결과를 다음 타임스텝에서도 재사용하려고 한다. Box2D는 타임스텝에 관계없이 충돌점을 확인하기 위해 충돌 ID를 사용한다. ID들은 한 충돌점을 다른 것들과 구별하게 해 주는, 기하학적 요소의 색인을 갖고 있다.&lt;/dd&gt;&lt;dt&gt;&lt;br /&gt;
&lt;/dt&gt;&lt;/dl&gt;충돌들은 두 AABB(축정렬 경계상자)가 겹칠 때 생성된다. 때때로 충돌 필터는 컨택트의 생성을 막을 것이다. Box2D는 가끔, 충돌이 필터링되더라도 컨택트를 생성할 필요가 있다. 이 경우 컨택트의 발생을 막는 b2NullContact가 사용된다. 컨택트는 AABB들이 겹치지 않을 때 파괴된다.&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;So you might gather that there may be contacts created for
shapes that are not touching (just their AABBs). Well, this is correct.
It&#039;s a &quot;chicken or egg&quot; problem. We don&#039;t know if we need a contact
object until one is created to analyze the collision. We could delete
the contact right away if the shapes are not touching, or we can just
wait until the AABBS stop overlapping. Box2D takes the latter approach. &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;h2&gt; &lt;span class=&quot;mw-headline&quot;&gt;Contact Listener&lt;/span&gt;&lt;/h2&gt;당신은 b2ContactListener를 구현함으로서 충돌 데이터를 얻을 수 있다. 이 리스너는 충돌점이 생성될 때, 그리고 1타임스텝 이상 지속될 때, 그리고 파괴될 때 보고한다.&amp;nbsp; 두 모양이 복수의 충돌점을 가진다는것을 주지하라.&lt;br /&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;
&lt;pre class=&quot;source-actionscript&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; MyContactListener &lt;span class=&quot;kw3&quot;&gt;extends&lt;/span&gt; b2ContactListener&lt;br /&gt;
&lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
	&lt;span class=&quot;kw3&quot;&gt;public&lt;/span&gt; override &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;Add&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;point:b2ContactPoint&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&amp;nbsp;: &lt;span class=&quot;kw3&quot;&gt;void&lt;/span&gt;&lt;br /&gt;
	&lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
		&lt;span class=&quot;co1&quot;&gt;// handle add point&lt;/span&gt;&lt;br /&gt;
	&lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
	&lt;span class=&quot;kw3&quot;&gt;public&lt;/span&gt; override &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; Persist&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;point:b2ContactPoint&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&amp;nbsp;: &lt;span class=&quot;kw3&quot;&gt;void&lt;/span&gt;&lt;br /&gt;
	&lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
		&lt;span class=&quot;co1&quot;&gt;// handle persist point&lt;/span&gt;&lt;br /&gt;
	&lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
	&lt;span class=&quot;kw3&quot;&gt;public&lt;/span&gt; override &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; Remove&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;point:b2ContactPoint&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&amp;nbsp;: &lt;span class=&quot;kw3&quot;&gt;void&lt;/span&gt;&lt;br /&gt;
	&lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
		&lt;span class=&quot;co1&quot;&gt;// handle remove point&lt;/span&gt;&lt;br /&gt;
	&lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
	&lt;span class=&quot;kw3&quot;&gt;public&lt;/span&gt; override &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; Result&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;point:b2ContactResult&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&amp;nbsp;: &lt;span class=&quot;kw3&quot;&gt;void&lt;/span&gt;&lt;br /&gt;
	&lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
		&lt;span class=&quot;co1&quot;&gt;// handle results&lt;/span&gt;&lt;br /&gt;
	&lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;b&gt;Caution&lt;/b&gt;
&lt;/p&gt;
b2ContactListener에 들어오는 접점에 대한 참조를 만들지 말라. 대신 당신의 버퍼에 접점의 데이터를 깊은 복사로 넘겨라. 아래의 예제가 이를 위한 한가지 방법을 보여준다.&lt;br /&gt;
지속적인 물리는 단계적 진행을 사용한다. 그러므로 하나의 접점은 같은 타임스텝에서 추가되고 제거된다. 이는 일반적으로는 문제가 되지 않지만, 당신의 코드는 이를 우아하게 처리해야 한다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
접점은 추가되거나 지속하거나, 제거되는 즉시 보고된다. 이것은 처리자가 호출되기 전에 일어난다. 그러므로 b2ContactPoint 객체는 계산된 충격량을 갖지 않는다. 그러나 당신이 접촉시의 충격량을 어림할 수 있도록 접점에서의 상대속도가 제공된다. 만약 당신이 Result 함수를 구현했다면, 처리자가 호출된 이후의 실질적인 접점에 대한 b2ContactResult객체를 받을 것이다. 이들 결과 구조체는 하위 스텝의 충격량을 포함한다. 다시 말하면, 연속적인 물리를 위해 당신은 b2World.Step당 생성되는 복수의 점점 당, 복수의 결과를 받게 될 것이다.&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;이것은 컨택트 콜백 안에서 물리공간을 변화시키도록 게임 로직을 구현하도록 유혹한다. 예를 들면, 당신은 &lt;span style=&quot;font-weight: bold;&quot;&gt;데미지&lt;/span&gt;를 를 적용하는 충돌을 보고받고 관련된 행동자와 그것의 강체를 파괴하려고 시도할 것이다. 그러나 Box2D는 당신이 콜백 안에서 물리공간을 변화시키도록 허용하지 않는다. 왜나하면 당신이 현재 Box2D가 처리하고 있는 물체를 파괴할 수 도 있고, 이것은 포인터를 고아로 만들기 때문이다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
접점 처리에 대한 추천할만한 관례는, 당신이 처리할 모든 접점을 버퍼에 넣고 해당 타임스텝이 끝난 다음에 처리하는 것이다. 당신은 항상 접점들을 타임스텝이 끝난 후에 곧바로 처리해야 한다. 그렇지 않으면 다른 클라이언트 코드가 물리공간을 변화시켜 놓을 것이고, 접점 버퍼가 쓸모없어지기 때문이다. 당신이 접점 버퍼를 처리할 때는 물리 공간을 변화시킬 수 있지만, 접점 버퍼에 고아가 된 포인터를 넣지 않도록 당신은 여전히 주의해야 한다.&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;아래의 코드는 충돌 처리 테스트(&lt;a href=&quot;http://code.google.com/p/pybox2d/source/browse/trunk/Python/testbed/test_CollisionProcessing.py&quot; class=&quot;external text&quot; title=&quot;http://code.google.com/p/pybox2d/source/browse/trunk/Python/testbed/test_CollisionProcessing.py&quot; rel=&quot;nofollow&quot;&gt;test_CollisionProcessing.py&lt;/a&gt;)를 포팅한 것 중에서 발췌한 것이며, 어떻게 접점 버퍼를 처리하는 중에 고아가 된 강체를 어떻게 처리하는지 보여준다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;
&lt;pre class=&quot;source-actionscript&quot;&gt;&lt;span style=&quot;color: rgb(51, 128, 0);&quot;&gt;// 우리는 접점에 관련된 몇 강체를 파괴할 것이다.&lt;/span&gt;&lt;br style=&quot;color: rgb(51, 128, 0);&quot;&gt;&lt;span style=&quot;color: rgb(51, 128, 0);&quot;&gt;// 우리는 파괴되어야 하는 강체들을 버퍼에 넣어야 한다.&lt;/span&gt;&lt;br style=&quot;color: rgb(51, 128, 0);&quot;&gt;&lt;span style=&quot;color: rgb(51, 128, 0);&quot;&gt;// 왜냐하면 그것들은 복수의 접점에 속해있을 것이므로.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; k_maxNuke:&lt;span class=&quot;kw3&quot;&gt;int&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;6&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; nuke:&lt;span class=&quot;kw3&quot;&gt;Array&lt;/span&gt; = &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;
&lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; nukeCount:&lt;span class=&quot;kw3&quot;&gt;int&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;span style=&quot;color: rgb(51, 128, 0);&quot;&gt;// 충돌 결과를 통과시킨다.&lt;/span&gt;&lt;br style=&quot;color: rgb(51, 128, 0);&quot;&gt;&lt;span style=&quot;color: rgb(51, 128, 0);&quot;&gt;// 보다 더 무거운 강체에 닿은 강체를 파괴한다.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; each&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; point:ContactPoint &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; contactPoints&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&lt;br /&gt;
{&lt;/span&gt;&lt;br /&gt;
    &lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; body1:b2Body = point.&lt;span class=&quot;me1&quot;&gt;body1&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;GetBody&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;
    &lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; body2:b2Body = point.&lt;span class=&quot;me1&quot;&gt;body2&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;GetBody&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;
    &lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; mass1:&lt;span class=&quot;kw3&quot;&gt;Number&lt;/span&gt; = body1.&lt;span class=&quot;me1&quot;&gt;GetMass&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;
    &lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; mass2:&lt;span class=&quot;kw3&quot;&gt;Number&lt;/span&gt; = body2.&lt;span class=&quot;me1&quot;&gt;GetMass&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;mass1 &amp;gt; &lt;span class=&quot;nu0&quot;&gt;0.0&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;and&lt;/span&gt; mass2 &amp;gt; &lt;span class=&quot;nu0&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;mass2 &amp;gt; mass1&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
            nuke_body = body1;&lt;br /&gt;
        &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
            nuke_body = body2;&lt;br /&gt;
        &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;nuke.&lt;span class=&quot;kw3&quot;&gt;indexOf&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;nuke_body&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; == &lt;span class=&quot;nu0&quot;&gt;-1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
            nuke.&lt;span class=&quot;kw3&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;nuke_body&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;
            &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;nuke.&lt;span class=&quot;kw3&quot;&gt;length&lt;/span&gt; == k_maxNuke&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
                &lt;span class=&quot;kw1&quot;&gt;break&lt;/span&gt;;&lt;br /&gt;
        &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
    &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;// 강체를 파괴한다.&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;중복된 것은 넘어간다.&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; each&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; b:b2Body &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; nuke&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
    &lt;span class=&quot;kw3&quot;&gt;trace&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&quot;Nuking:&quot;&lt;/span&gt;, b&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;
    self.&lt;span class=&quot;me1&quot;&gt;world&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;DestroyBody&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;b&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;
&lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;&lt;br /&gt;
 &lt;span class=&quot;mw-headline&quot;&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span class=&quot;mw-headline&quot;&gt;Contact Filtering&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;당신은 종종 게임 안의 모든 물체가 충돌을 일으키는 것을 바라지 않을 것이다. 예를 들면 당신은 정해진 캐릭터만 통과할 수 있는 문을 만들고 싶을 수도 있다. 이것을 컨택트 필터링이라 부른다. 일부 상호작용이 &lt;span style=&quot;font-weight: bold;&quot;&gt;걸러지기&lt;/span&gt; 때문이다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;Box2D는 당신이 b2ContactFilter 클래스를 구현함으로서 커스텀 필터를 얻는 것을 허용한다. 이 클래스는 당신이 두 개의 b2Shape포인터를 받는 ShouldCollide 함수를 구현할 것을 요구한다. 당신이 구현할 함수는 두 모양이 충돌한다면 참을 반환하는 것이다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;ShouldCollide의 기본적인 구현은, 모양 챕터의 &lt;a href=&quot;http://www.box2d.org/wiki/index.php?title=Manual/AS3#Filtering&quot; title=&quot;&quot;&gt;필터링&lt;/a&gt; 섹션에 구현된 b2FilterData를 사용한다.&lt;br /&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;
&lt;pre class=&quot;source-actionscript&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; b2ContactFilter&lt;br /&gt;
&lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
	&lt;span class=&quot;co1&quot;&gt;/// Return true if contact calculations should be performed between these two shapes.&lt;/span&gt;&lt;br /&gt;
	&lt;span class=&quot;co1&quot;&gt;/// @warning for performance reasons this is only called when the AABBs begin to overlap.&lt;/span&gt;&lt;br /&gt;
	&lt;span class=&quot;kw3&quot;&gt;public&lt;/span&gt; virtual &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; ShouldCollide&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;shape1:b2Shape, shape2:b2Shape&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&amp;nbsp;: &lt;span class=&quot;kw3&quot;&gt;Boolean&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
		&lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; filter1:b2FilterData = shape1.&lt;span class=&quot;me1&quot;&gt;GetFilterData&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;
		&lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; filter2:b2FilterData = shape2.&lt;span class=&quot;me1&quot;&gt;GetFilterData&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
		&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;filter1.&lt;span class=&quot;me1&quot;&gt;groupIndex&lt;/span&gt; == filter2.&lt;span class=&quot;me1&quot;&gt;groupIndex&lt;/span&gt; &amp;amp;&amp;amp; filter1.&lt;span class=&quot;me1&quot;&gt;groupIndex&lt;/span&gt;&amp;nbsp;!= &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
		&lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
			&lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; filter1.&lt;span class=&quot;me1&quot;&gt;groupIndex&lt;/span&gt; &amp;gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;
		&lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
		&lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; collide:&lt;span class=&quot;kw3&quot;&gt;Boolean&lt;/span&gt; = &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;filter1.&lt;span class=&quot;me1&quot;&gt;maskBits&lt;/span&gt; &amp;amp; filter2.&lt;span class=&quot;me1&quot;&gt;categoryBits&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&amp;nbsp;!= &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &amp;amp;&amp;amp; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;filter1.&lt;span class=&quot;me1&quot;&gt;categoryBits&lt;/span&gt; &amp;amp; filter2.&lt;span class=&quot;me1&quot;&gt;maskBits&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&amp;nbsp;!= &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;
		&lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; collide;&lt;br /&gt;
	&lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
	&lt;span class=&quot;kw3&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; b2_defaultFilter:b2ContactFilter = &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; b2ContactFilter&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-4-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-4-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-4-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>Box2D AS3 매뉴얼</category>
			<category>물리엔진</category>
			<category>플래시</category>
			<author>하늘색공책 하늘색 공책</author>
			<guid>http://azurenote.com/4</guid>
			<comments>http://azurenote.com/4#entry4comment</comments>
			<pubDate>Sun, 18 Oct 2009 15:52:12 +0900</pubDate>
		</item>
	</channel>
</rss>
