本文整理汇总了C++中Input::GetJoystickByIndex方法的典型用法代码示例。如果您正苦于以下问题:C++ Input::GetJoystickByIndex方法的具体用法?C++ Input::GetJoystickByIndex怎么用?C++ Input::GetJoystickByIndex使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Input
的用法示例。
在下文中一共展示了Input::GetJoystickByIndex方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: UpdateTouches
void Touch::UpdateTouches(Controls& controls) // Called from HandleUpdate
{
zoom_ = false; // reset bool
Input* input = GetSubsystem<Input>();
// Zoom in/out
if (input->GetNumTouches() == 2)
{
TouchState* touch1 = input->GetTouch(0);
TouchState* touch2 = input->GetTouch(1);
// Check for zoom pattern (touches moving in opposite directions and on empty space)
if (!touch1->touchedElement_ && !touch2->touchedElement_ && ((touch1->delta_.y_ > 0 && touch2->delta_.y_ < 0) || (touch1->delta_.y_ < 0 && touch2->delta_.y_ > 0)))
zoom_ = true;
else
zoom_ = false;
if (zoom_)
{
int sens = 0;
// Check for zoom direction (in/out)
if (Abs(touch1->position_.y_ - touch2->position_.y_) > Abs(touch1->lastPosition_.y_ - touch2->lastPosition_.y_))
sens = -1;
else
sens = 1;
cameraDistance_ += Abs(touch1->delta_.y_ - touch2->delta_.y_) * sens * touchSensitivity_ / 50.0f;
cameraDistance_ = Clamp(cameraDistance_, CAMERA_MIN_DIST, CAMERA_MAX_DIST); // Restrict zoom range to [1;20]
}
}
// Gyroscope (emulated by SDL through a virtual joystick)
if (useGyroscope_ && input->GetNumJoysticks() > 0) // numJoysticks = 1 on iOS & Android
{
JoystickState* joystick = input->GetJoystickByIndex(0);
if (joystick->GetNumAxes() >= 2)
{
if (joystick->GetAxisPosition(0) < -GYROSCOPE_THRESHOLD)
controls.Set(CTRL_LEFT, true);
if (joystick->GetAxisPosition(0) > GYROSCOPE_THRESHOLD)
controls.Set(CTRL_RIGHT, true);
if (joystick->GetAxisPosition(1) < -GYROSCOPE_THRESHOLD)
controls.Set(CTRL_FORWARD, true);
if (joystick->GetAxisPosition(1) > GYROSCOPE_THRESHOLD)
controls.Set(CTRL_BACK, true);
}
}
}
示例2: HandleSceneUpdate
void Player::HandleSceneUpdate(StringHash eventType, VariantMap &eventData)
{
//Take the frame time step, which is stored as a double
float timeStep = eventData[Update::P_TIMESTEP].GetFloat();
//Pulse and spin the counters' apples and hearts
UpdateGUI(timeStep);
//Only handle input when player is active
if (!rootNode_->IsEnabled()) return;
Input* input = GetSubsystem<Input>();
//Movement values
Vector3 move = Vector3::ZERO;
Vector3 moveJoy = Vector3::ZERO;
Vector3 moveKey = Vector3::ZERO;
float thrust = pilotMode_ ? 256.0f : 2323.0f;
float maxSpeed = pilotMode_? 1.8f : 23.0f; //Firing values
Vector3 fire = Vector3::ZERO;
Vector3 fireJoy = Vector3::ZERO;
Vector3 fireKey = Vector3::ZERO;
//Read input
if (input->GetJoystickByIndex(0)){
moveJoy = Vector3::RIGHT * input->GetJoystickByIndex(0)->GetAxisPosition(0) +
Vector3::BACK * input->GetJoystickByIndex(0)->GetAxisPosition(1);
fireJoy = Vector3::RIGHT * input->GetJoystickByIndex(0)->GetAxisPosition(2) +
Vector3::BACK * input->GetJoystickByIndex(0)->GetAxisPosition(3);
}
moveKey = Vector3::LEFT * input->GetKeyDown(KEY_A) +
Vector3::RIGHT * input->GetKeyDown(KEY_D) +
Vector3::FORWARD * input->GetKeyDown(KEY_W) +
Vector3::BACK * input->GetKeyDown(KEY_S);
fireKey = Vector3::LEFT * (input->GetKeyDown(KEY_J) || input->GetKeyDown(KEY_KP_4)) +
Vector3::RIGHT * (input->GetKeyDown(KEY_L) || input->GetKeyDown(KEY_KP_6)) +
Vector3::FORWARD * (input->GetKeyDown(KEY_I) || input->GetKeyDown(KEY_KP_8)) +
Vector3::BACK * (input->GetKeyDown(KEY_K) || input->GetKeyDown(KEY_KP_2) || input->GetKeyDown(KEY_KP_5)) +
Quaternion(45.0f, Vector3::UP)*Vector3::LEFT * input->GetKeyDown(KEY_KP_7) +
Quaternion(45.0f, Vector3::UP)*Vector3::RIGHT * input->GetKeyDown(KEY_KP_3) +
Quaternion(45.0f, Vector3::UP)*Vector3::FORWARD * input->GetKeyDown(KEY_KP_9) +
Quaternion(45.0f, Vector3::UP)*Vector3::BACK * input->GetKeyDown(KEY_KP_1);
//Pick most significant input
moveJoy.Length() > moveKey.Length() ? move = moveJoy : move = moveKey;
fireJoy.Length() > fireKey.Length() ? fire = fireJoy : fire = fireKey;
//Restrict move vector length
if (move.Length() > 1.0f) move /= move.Length();
//Deadzone
else if (move.Length() < 0.1f) move *= 0.0f;
if (fire.Length() < 0.1f) fire *= 0.0f;
else fire.Normalize();
//When in pilot mode
if (pilotMode_){
//Apply movement
Vector3 force = move * thrust * timeStep;
if (rigidBody_->GetLinearVelocity().Length() < maxSpeed ||
(rigidBody_->GetLinearVelocity().Normalized() + force.Normalized()).Length() < 1.0f) {
rigidBody_->ApplyForce(force);
}
//Update rotation according to direction of the player's movement.
Vector3 velocity = rigidBody_->GetLinearVelocity();
Vector3 lookDirection = velocity + 2.0f*fire;
Quaternion rotation = rootNode_->GetWorldRotation();
Quaternion aimRotation = rotation;
aimRotation.FromLookRotation(lookDirection);
rootNode_->SetRotation(rotation.Slerp(aimRotation, 7.0f * timeStep * velocity.Length()));
//Update animation
if (velocity.Length() > 0.05f){
animCtrl_->PlayExclusive("Resources/Models/WalkRelax.ani", 0, true, 0.15f);
animCtrl_->SetSpeed("Resources/Models/WalkRelax.ani", velocity.Length()*2.3f);
animCtrl_->SetStartBone("Resources/Models/WalkRelax.ani", "MasterBone");
}
else {
animCtrl_->PlayExclusive("Resources/Models/IdleRelax.ani", 0, true, 0.15f);
animCtrl_->SetStartBone("Resources/Models/IdleRelax.ani", "MasterBone");
}
// When in ship mode
} else {
//Update shield
Quaternion randomRotation = Quaternion(Random(360.0f),Random(360.0f),Random(360.0f));
shieldNode_->SetRotation(shieldNode_->GetRotation().Slerp(randomRotation, Random(1.0f)));
Color shieldColor = shieldMaterial_->GetShaderParameter("MatDiffColor").GetColor();
Color newColor = Color(shieldColor.r_ * Random(0.6f, 0.9f),
shieldColor.g_ * Random(0.7f, 0.95f),
shieldColor.b_ * Random(0.8f, 0.9f));
shieldMaterial_->SetShaderParameter("MatDiffColor", shieldColor.Lerp(newColor, Min(timeStep * 23.5f, 1.0f)));
//Float
ship_.node_->SetPosition(Vector3::UP *masterControl_->Sine(2.3f, -0.1f, 0.1f));
//Apply movement
Vector3 force = move * thrust * timeStep;
if (rigidBody_->GetLinearVelocity().Length() < maxSpeed ||
(rigidBody_->GetLinearVelocity().Normalized() + force.Normalized()).Length() < 1.0f) {
rigidBody_->ApplyForce(force);
}
//.........这里部分代码省略.........