![](/img/trans.png)
[英]How to stop Selenium clicking an element off-screen on iOS Safari?
[英]How to stop my character going off-screen?
我希望每次碰到屏幕/畫布的邊緣都會停止我的角色,所以我在每個邊框的末尾添加了一個矩形(帶有2d對撞機),所以我的角色會與它碰撞並停止向那個方向移動,但是問題是,例如,如果我按下左邊的矩形,我仍按A向左移動,我的角色就會“震動”。 我試圖通過在碰到某個矩形時將它的速度設置為0來解決這個問題,但是當我到達邊緣后,我無法在任何方向上移動。
public class CharacterMovement : MonoBehaviour {
public float speed = 5f;
void Start() {
}
void Update() {
if (Input.GetKey(KeyCode.W))
{
transform.Translate(0, speed * Time.deltaTime, 0);
}
if (Input.GetKey(KeyCode.S))
{
transform.Translate(0, -speed * Time.deltaTime, 0);
}
if (Input.GetKey(KeyCode.A))
{
transform.Translate(-speed * Time.deltaTime, 0, 0);
}
if (Input.GetKey(KeyCode.D))
{
transform.Translate(speed * Time.deltaTime, 0, 0);
}
}
void OnCollisionEnter2D(Collision2D col)
{
if (col.gameObject.name == "offscreen")
{
speed = 0f;
}else
{
speed = 5f;
}
}
}
我不熟悉單聲道行為方法,但我認為問題是當你等於邊緣時,它會在下次更新時保持不變。 由於沒有任何東西使它成為假,速度仍為0。
嘗試在每個按下的鍵的更新方法中進行檢查。
就像是
if (key ==moveleft)
{
if(sprite.leftedge>edgeoftheleftscreen+1)
Sprite.moveleft();
}
if(key==moveright)
{
if(sprite.rightedge<edgeoftherightscreen-1)
Sprite.moveright();
}
希望這可以幫助。
搖晃發生,因為你只是把你的角色放在邊境的對手中,物理學試圖把他帶回來。 在這樣的情況下,我並不喜歡依賴碰撞器。 假設您將角色設置得非常高,或者你的鏡架掉落,你的角色可能會出現在對手的另一側,或者至少會再次發生震動。 我要做的是檢查點是否:
deltaPos = speed * Time.deltaTime
transform.position + deltaPos
不在屏幕上。 如果是,您應該將deltaPos夾到屏幕邊框的距離。
嘗試在角色與側面碰撞時禁用單個輸入,這樣您可以在觸摸兩側后移動到另一側,而不是將速度設置為0。
您目前遇到的問題是,當您與側面發生碰撞時,在您仍然觸摸側面的同時將速度設置為0,並且您不能遠離您經常接觸的側面,因為速度為0。
public class CharacterMovement : MonoBehaviour {
public float speed = 5f;
public bool touchingLeft;
public bool touchingRight;
void Start() {
}
void Update() {
if (Input.GetKey(KeyCode.W))
{
transform.Translate(0, speed * Time.deltaTime, 0);
}
if (Input.GetKey(KeyCode.S))
{
transform.Translate(0, -speed * Time.deltaTime, 0);
}
if (Input.GetKey(KeyCode.A) && !touchingLeft)
{
transform.Translate(-speed * Time.deltaTime, 0, 0);
touchingRight = false;
}
if (Input.GetKey(KeyCode.D) && !touchingRight)
{
transform.Translate(speed * Time.deltaTime, 0, 0);
touchingLeft = false;
}
}
void OnCollisionEnter2D(Collision2D col)
{
if (col.gameObject.name == "leftOffscreen")
{
touchingLeft = true;
}
if else (col.gameObject.name == "rightOffscreen")
{
touchingRight = true;
}
}
}
但是,有更有效的方法可以做到這一點,但我覺得這適用於您現有的代碼。
如果屏幕調整大小,您可能希望將播放器的x值鉗制到屏幕邊緣的x值。
希望能幫助到你
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.