상자 2D의 새로운 기능입니다 ....Box2D의 가속도계
나는 CCSprite에 볼 이미지가 있습니다. 내가 가속계를 사용하여 전체 화면에서 공을 이동하고 싶습니다 ... box2d에서 가속도계를 사용하는 방법 ??
감사합니다 ... 사전
상자 2D의 새로운 기능입니다 ....Box2D의 가속도계
나는 CCSprite에 볼 이미지가 있습니다. 내가 가속계를 사용하여 전체 화면에서 공을 이동하고 싶습니다 ... box2d에서 가속도계를 사용하는 방법 ??
감사합니다 ... 사전
표준 cocos2d-box2d 템플릿 파일은 가속도계 값을 기준으로 중력을 적용하여 가속도계를 사용하여 상자를 이동합니다.
- (void)accelerometer:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration
{
static float prevX=0, prevY=0;
//#define kFilterFactor 0.05f
#define kFilterFactor 1.0f // don't use filter. the code is here just as an example
float accelX = (float) acceleration.x * kFilterFactor + (1- kFilterFactor)*prevX;
float accelY = (float) acceleration.y * kFilterFactor + (1- kFilterFactor)*prevY;
prevX = accelX;
prevY = accelY;
// accelerometer values are in "Portrait" mode. Change them to Landscape left
// multiply the gravity by 10
b2Vec2 gravity(-accelY * 10, accelX * 10);
world->SetGravity(gravity);
}
휴대 전화 이동 방법에 따라 공이 원하는 것을 구체적으로 지정해야합니다. 귀하의 질문은 현재의 형태로 대답하기가 어렵습니다.
에 가속도계 측정을 얻고 힘 = 계수 * 측정을 말한다. 이 힘을 b2Body에 적용
내가, 장치의 작동을 테스트
, 당신의 공 스프라이트 가진 태그가 당신의 가속도계 위임이 코드를 바꾸기 1.
입니다 보자.
공이 가속도계로 이동합니다.
-(void)accelerometer:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration
{
#define kFilterFactor 0.75
accelerometer.updateInterval = 1.0f/60.0f;
static UIAccelerationValue rollingX = 0, rollingY = 0;
for (b2Body *b = world->GetBodyList(); b; b = b->GetNext())
{
if (b->GetUserData() != NULL)
{
CCSprite *sprite = (CCSprite*)b->GetUserData();
if (sprite.tag == 1) {
rollingX = (acceleration.x * kFilterFactor) + (rollingX * 0.25);
rollingY = (acceleration.y * kFilterFactor) + (rollingY * 0.25);
float accelX = rollingX;
float accelY = rollingY;
CGPoint moveNewPosition = sprite.position;
if (accelX > 0.1) {
moveNewPosition.y += 2;
} if (accelX < 0.1) {
moveNewPosition.y -= 2;
}
if (accelY > 0.1) {
moveNewPosition.x -= 2;
} if (accelY < -0.1) {
moveNewPosition.x += 2;
}
b->SetLinearVelocity(b2Vec2(2,2));
sprite.position = ccp(moveNewPosition.x , moveNewPosition.y);
sprite.rotation = -1 * CC_RADIANS_TO_DEGREES(b->GetAngle());
}
}
}
}
잘 진행되기를 바랍니다.
내 응용 프로그램에는 내가 가속도계 및 일부 다른 객체를 회전 시키길 원하지만 ... 내 응용 프로그램에서 코드가 작동하지 않습니다. – Jasmit
공을 가속도계 바로 회전시키고 싶습니까? 당신이 기울이면 좌우로 움직이기를 원하십니까? 내가 준 코드는 cocos2d 샘플 코드입니다. box2d를 읽고 어떻게 작동하는지 이해해야한다고 생각합니다. 앤드류의 방법은 효과가 있지만 그는 접시에 모든 것을 제공하지는 않습니다.) 남자에게 고기를 가르쳐주세요. – Bongeh
중력을 설정하는 대신 공과 관련된 b2body에 힘을가하십시오. – placeybordeaux