2016-04-12 35 views
0

C# 'de birlik halinde bir yukarıdan aşağı 2D oyun yapıyorum. Şu anda sadece hareket kurmak, ama daha önce anlayamadığım bir soruna rastladım. Oyun bir ızgarada kuruldu ve yukarı, aşağı, sağa ve sola hareket etmek için sadece ok tuşlarını kullanıyorum. Bu benim senaryom:Unity 2D C# garip hareket davranışı

public class Player : MonoBehaviour 
{ 

    public float playerSpeed; 

    void FixedUpdate() 
    { 
     // Movement 
     if (transform.position.x < 0.25) 
     { 
      if (Input.GetKeyUp(KeyCode.RightArrow)) 
      { 
       transform.position += new Vector3(playerSpeed, 0, 0); 
      }   
     } 
     if (transform.position.x > -0.3) 
     { 
      if (Input.GetKeyUp(KeyCode.LeftArrow)) 
      { 
       transform.position += new Vector3(-playerSpeed, 0, 0); 
      } 
     } 
     if (transform.position.y < 0.15) 
     { 
      if (Input.GetKeyUp(KeyCode.UpArrow)) 
      { 
       transform.position += new Vector3(0, playerSpeed, 0); 
      } 
     } 
     if (transform.position.y > -0.10) 
     { 
      if (Input.GetKeyUp(KeyCode.DownArrow)) 
      { 
       transform.position += new Vector3(0, -playerSpeed, 0); 
      } 
     } 
    } 
} 

her yön için ifadeleri oyuncu odasının sınırlarını bırakmaz emin eğer ilk. Oluyor olan sinir bozucu şey hareket ederken, 0.05, 0.1, 0.15, vs gibi amaçlanan güzel kare sayılarla başlar, ama sonra bir şekilde ders gider ve -0.05000001, -7.450581e-09, 0.04999999, istedikleri yakın olan numaraları verir sayılar ama yeterince doğru değil. Herhangi bir fikir? Tüm öneriler takdir edildi.

+0

, yüzdürmenin kesinliğinden dolayı değil mi? Yani, 0.0f 0.000000001f'ye eşit mi? – Ceros

+0

bir çift daha iyi olur mu? – oscaro

+0

Muhtemelen, tamsayıları kullanarak ızgara yapmaktan daha iyi olurdu. Ayrıca, bu 'Güncelleme' için yapardı. –

cevap

0
static void Main(string[] args) 
{ 
    float wMyFloat = 1.5f; 
    for(int i = 0; i < 100; i++) 
    { 
    wMyFloat += 0.1f; 
    } 


    Console.WriteLine(wMyFloat.ToString()); 
    Console.ReadLine(); 
} 

Eşitsin 11,5 bu hariç ama baskı, bir ofset ile sona erecek bu şamandıra (veya çift) ile += şamandıra tarafından 11.50001

eşit olduğunu söyler. Ve ayrıca =='u gerçekleştiremezsiniz. 11.5 != 11.50001

0
void FixedUpdate(){ 
     // Check to see if bounds left right 
     if(transform.position.x < 0.25f && tranform.position.x > -0.3f){ 
      if (Input.GetKeyUp(KeyCode.RightArrow)) 
      { 
       transform.position += new Vector3(playerSpeed, 0, 0); 
      }  

      else if (Input.GetKeyUp(KeyCode.LeftArrow)) 
      { 
       transform.position += new Vector3(-playerSpeed, 0, 0); 
      } 
     } 
     // Check to see if bounds up and down 
     if(transform.position.y < 0.15f && tranform.position.y > -0.1f){ 
      if (Input.GetKeyUp(KeyCode.UpArrow)) 
      { 
       transform.position += new Vector3(0, playerSpeed, 0); 
      } 

      else if (Input.GetKeyUp(KeyCode.DownArrow)) 
      { 
       transform.position += new Vector3(0, -playerSpeed, 0); 
      } 

     } 
    }