Pac-Man is moving too fast

  • Thread starter Thread starter awesomiser0207
  • Start date Start date
A

awesomiser0207

Guest
I am making a pac-man clone on unity using c# using a node based movement system at each turn. The problem is instead of moving at a set speed pac-man moved ridiculously fast.

could anybody please help. I have pasted the code below.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PacMan : MonoBehaviour {

public float speed = 2.0f;

private Vector2 direction = Vector2.zero;
private Vector2 nextDirection;

private Node currentNode, previousNode, targetNode;

// Use this for initialization
void Start () {

Node node = GetNodeAtPosition(transform.localPosition);

if (node != null) {

currentNode = node;
Debug.Log (currentNode);
}

direction = Vector2.left;
ChangePosition (direction);
}

// Update is called once per frame
void Update () {

CheckInput ();

Move();

UpdateOrientation();
}

void CheckInput () {

if (Input.GetKeyDown (KeyCode.LeftArrow)) {

ChangePosition(Vector2.left);

} else if (Input.GetKeyDown (KeyCode.RightArrow)) {

ChangePosition(Vector2.right);

} else if (Input.GetKeyDown (KeyCode.UpArrow)) {

ChangePosition(Vector2.up);

} else if (Input.GetKeyDown (KeyCode.DownArrow)) {

ChangePosition(Vector2.down);
}
}

void ChangePosition (Vector2 d) {

if (d != direction)
nextDirection = d;

if (currentNode != null) {

Node moveToNode = CanMove (d);

if (moveToNode != null) {

direction = d;
targetNode = moveToNode;
previousNode = currentNode;
currentNode = null;

}
}
}

void Move () {

if (targetNode != currentNode && targetNode != null) {

if (OverShotTarget ()) {

currentNode = targetNode;

transform.localPosition = currentNode.transform.position;

Node moveToNode = CanMove (nextDirection);

if (moveToNode != null)
direction = nextDirection;

if (moveToNode == null)
moveToNode = CanMove(direction);

if (moveToNode != null)
{

targetNode = moveToNode;
previousNode = currentNode;
currentNode = null;

} else {
direction = Vector2.zero;
}

} else {

transform.localPosition += (Vector3)(direction * speed) * Time.deltaTime;
}
}
}

void MoveToNode (Vector2 d) {

Node moveToNode = CanMove (d);

if (moveToNode != null) {

transform.localPosition = moveToNode.transform.position;
currentNode = moveToNode;
}
}

void UpdateOrientation() {

if (direction == Vector2.left) {

transform.localScale = new Vector3(-1, 1, 1);
transform.localRotation = Quaternion.Euler(0, 0, 0);

} else if (direction == Vector2.right) {

transform.localScale = new Vector3(1, 1, 1);
transform.localRotation = Quaternion.Euler(0, 0, 0);

}
else if (direction == Vector2.up) {

transform.localScale = new Vector3(1, 1, 1);
transform.localRotation = Quaternion.Euler(0, 0, 90);

} else if (direction == Vector2.down) {

transform.localScale = new Vector3(1, 1, 1);
transform.localRotation = Quaternion.Euler(0, 0, 270);

}
}

Node CanMove (Vector2 d) {

Node moveToNode = null;

for (int i = 0; i < currentNode.neighbours.Length; i++) {

if (currentNode.validDirections == d) {

moveToNode = currentNode = currentNode.neighbours;
break;
}
}

return moveToNode;
}

Node GetNodeAtPosition (Vector2 pos) {

GameObject tile = GameObject.Find ("Game").GetComponent<GameBoard> ().board[(int)pos.x, (int)pos.y];

if (tile != null) {

return tile.GetComponent<Node>();
}

return null;
}

bool OverShotTarget () {

float nodeToTarget = LengthFromNode(targetNode.transform.position);
float nodeToSelf = LengthFromNode(transform.localPosition);

return nodeToSelf > nodeToTarget;
}

float LengthFromNode (Vector2 targetPosition) {

Vector2 vec = targetPosition - (Vector2)previousNode.transform.position;
return vec.sqrMagnitude;
}

}

Continue reading...
 
Back
Top