Difference between revisions of "Game Programming Class3"
(→Input) |
(→Input Error missing DirectX9) |
||
Line 52: | Line 52: | ||
Solution: Install DirectX 9 Runtime http://www.microsoft.com/en-us/download/confirmation.aspx?id=8109 or http://www.microsoft.com/en-us/download/details.aspx?id=35 | Solution: Install DirectX 9 Runtime http://www.microsoft.com/en-us/download/confirmation.aspx?id=8109 or http://www.microsoft.com/en-us/download/details.aspx?id=35 | ||
+ | |||
+ | ==Unity Basics and Movement== | ||
+ | Demo add Art and setup folders | ||
+ | |||
+ | Movement script | ||
+ | |||
+ | parameter | ||
+ | <csharp> | ||
+ | public Vector3 Direction = new Vector3(1, 0, 0); | ||
+ | public float Speed = 5; | ||
+ | </csharp> | ||
+ | Update | ||
+ | <csharp> | ||
+ | void Update () { | ||
+ | |||
+ | //Move Pacman | ||
+ | this.transform.position += this.Direction * this.Speed * Time.deltaTime; | ||
+ | } | ||
+ | </csharp> | ||
+ | |||
+ | Full Script with wall bouncing | ||
+ | <csharp> | ||
+ | using UnityEngine; | ||
+ | using System.Collections; | ||
+ | |||
+ | public class SimpleMove : MonoBehaviour { | ||
+ | |||
+ | |||
+ | public Vector3 Direction = new Vector3(1, 0, 0); | ||
+ | public float Speed = 5; | ||
+ | |||
+ | static Vector3 cameraBottomLeft; //calculate camera left | ||
+ | static Vector3 cameraTopRight; //calculate camera top | ||
+ | static Rect cameraRect; //rectangle for camera | ||
+ | |||
+ | |||
+ | // Use this for initialization | ||
+ | void Start () { | ||
+ | |||
+ | cameraBottomLeft = Camera.main.ScreenToWorldPoint(Vector3.zero); | ||
+ | cameraTopRight = Camera.main.ScreenToWorldPoint(new Vector3( | ||
+ | Camera.main.pixelWidth, Camera.main.pixelHeight)); | ||
+ | |||
+ | cameraRect = new Rect( | ||
+ | cameraBottomLeft.x, | ||
+ | cameraBottomLeft.y, | ||
+ | cameraTopRight.x - cameraBottomLeft.x, | ||
+ | cameraTopRight.y - cameraBottomLeft.y); | ||
+ | |||
+ | } | ||
+ | |||
+ | // Update is called once per frame | ||
+ | void Update () { | ||
+ | |||
+ | //Move Pacman | ||
+ | this.transform.position += this.Direction * this.Speed * Time.deltaTime; | ||
+ | |||
+ | if (!cameraRect.Contains(this.transform.position)) | ||
+ | { | ||
+ | //keep on screen | ||
+ | if (this.transform.position.x <= cameraRect.xMin) | ||
+ | { | ||
+ | |||
+ | this.Direction.x *= -1; | ||
+ | } | ||
+ | if (this.transform.position.x >= cameraRect.xMax) | ||
+ | { | ||
+ | |||
+ | this.Direction.x *= -1; | ||
+ | } | ||
+ | if (this.transform.position.y > cameraRect.yMax) | ||
+ | { | ||
+ | |||
+ | this.Direction.y *= -1; | ||
+ | } | ||
+ | if (this.transform.position.y < cameraRect.yMin) | ||
+ | { | ||
+ | |||
+ | this.Direction.y *= -1; | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | } | ||
+ | </csharp> | ||
+ | |||
+ | and Input from keyboard | ||
+ | <csharp> | ||
+ | using UnityEngine; | ||
+ | using System.Collections; | ||
+ | |||
+ | public class SimpleInput : MonoBehaviour { | ||
+ | |||
+ | |||
+ | public Vector3 Direction; | ||
+ | public float Speed; | ||
+ | public Vector3 keyDirection; | ||
+ | |||
+ | // Use this for initialization | ||
+ | void Start () { | ||
+ | |||
+ | } | ||
+ | |||
+ | // Update is called once per frame | ||
+ | void Update () { | ||
+ | //input | ||
+ | //direction.x = direction.y = 0; | ||
+ | keyDirection.x = keyDirection.y = 0; | ||
+ | |||
+ | //Keyboard | ||
+ | if (Input.GetKey("right")) | ||
+ | { | ||
+ | keyDirection.x += 1; | ||
+ | } | ||
+ | if (Input.GetKey("left")) | ||
+ | { | ||
+ | keyDirection.x += -1; | ||
+ | } | ||
+ | |||
+ | if (Input.GetKey("up")) | ||
+ | { | ||
+ | keyDirection.y += 1; | ||
+ | } | ||
+ | if (Input.GetKey("down")) | ||
+ | { | ||
+ | keyDirection.y += -1; | ||
+ | } | ||
+ | |||
+ | Direction += keyDirection; | ||
+ | Direction.Normalize(); | ||
+ | |||
+ | |||
+ | //Move Pacman | ||
+ | this.transform.position += this.Direction * this.Speed * Time.deltaTime; | ||
+ | |||
+ | } | ||
+ | } | ||
+ | </csharp> | ||
==Homework== | ==Homework== |
Revision as of 16:47, 22 September 2015
Contents
Class 3 Input Handling
Inclass Keyboard input demo
KeyboardState keyboardState = Keyboard.GetState();
Explore Limitations of Built in Keyboard state.
Input
input from Game Controller and Keyboard
XNA has built in support for up to 4 game controllers. The default controller is a x-box controller. X-Box Controller The Controller is accessed through the GamePad Object and the GamePadState Structure reference types <csharp>
//Get an instance of the gamePadState Structure GamePadState gamePad1State = GamePad.GetState(PlayerIndex.One);
/*Since the Keyboard structure is Windows only we need to use some preprocessor directives to only compile the KeyBoard state code if the target is not XBOX360 (I should also add zune if this is one of our build targets)
- /
#if !XBOX360 #region KeyBoard KeyboardState keyboardState = Keyboard.GetState(); #endif
</csharp>
Angle Measured in Radians
using atan2 to get the angle from the direction vector
IntroSimpleSpriteUpdateRotateWindows Project
SpriteJump Project
Input Error missing DirectX9
Error:An unhandled exception of type 'System.DllNotFoundException' occurred in SharpDX.XInput.dll Additional information: Unable to load DLL 'xinput1_3.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
XInput library may be missing if you have a fresh install of win8.1 or 10
Solution: Install DirectX 9 Runtime http://www.microsoft.com/en-us/download/confirmation.aspx?id=8109 or http://www.microsoft.com/en-us/download/details.aspx?id=35
Unity Basics and Movement
Demo add Art and setup folders
Movement script
parameter <csharp> public Vector3 Direction = new Vector3(1, 0, 0);
public float Speed = 5;
</csharp> Update <csharp> void Update () {
//Move Pacman this.transform.position += this.Direction * this.Speed * Time.deltaTime;
} </csharp>
Full Script with wall bouncing <csharp> using UnityEngine; using System.Collections;
public class SimpleMove : MonoBehaviour {
public Vector3 Direction = new Vector3(1, 0, 0); public float Speed = 5;
static Vector3 cameraBottomLeft; //calculate camera left static Vector3 cameraTopRight; //calculate camera top static Rect cameraRect; //rectangle for camera
// Use this for initialization
void Start () {
cameraBottomLeft = Camera.main.ScreenToWorldPoint(Vector3.zero); cameraTopRight = Camera.main.ScreenToWorldPoint(new Vector3( Camera.main.pixelWidth, Camera.main.pixelHeight));
cameraRect = new Rect( cameraBottomLeft.x, cameraBottomLeft.y, cameraTopRight.x - cameraBottomLeft.x, cameraTopRight.y - cameraBottomLeft.y);
}
// Update is called once per frame void Update () {
//Move Pacman this.transform.position += this.Direction * this.Speed * Time.deltaTime;
if (!cameraRect.Contains(this.transform.position)) { //keep on screen if (this.transform.position.x <= cameraRect.xMin) { this.Direction.x *= -1; } if (this.transform.position.x >= cameraRect.xMax) { this.Direction.x *= -1; } if (this.transform.position.y > cameraRect.yMax) { this.Direction.y *= -1; } if (this.transform.position.y < cameraRect.yMin) { this.Direction.y *= -1; } }
} } </csharp>
and Input from keyboard <csharp> using UnityEngine; using System.Collections;
public class SimpleInput : MonoBehaviour {
public Vector3 Direction; public float Speed; public Vector3 keyDirection; // Use this for initialization
void Start () {
}
// Update is called once per frame void Update () {
//input //direction.x = direction.y = 0; keyDirection.x = keyDirection.y = 0;
//Keyboard if (Input.GetKey("right")) { keyDirection.x += 1; } if (Input.GetKey("left")) { keyDirection.x += -1; }
if (Input.GetKey("up")) { keyDirection.y += 1; } if (Input.GetKey("down")) { keyDirection.y += -1; }
Direction += keyDirection; Direction.Normalize();
//Move Pacman this.transform.position += this.Direction * this.Speed * Time.deltaTime;
} } </csharp>
Homework
Moving Game 2 Interesting movement
Update your moving assigment to make the movement more interesting. Use more than 1 input method ie Keyboard, xbox controller, mouse etc.
Extra Credit
- Sprite Class
- Build a class that is reusable that can draw a single texture on the screen. Be sure to encapsulate all the properties and method that you need to draw the sprite.
- Create an XNA project that uses the Keyboard for input.
- Has at least 3 different moving sprite with a common code base.
- the sprites should inherit from the same class. Game components are a plus. don't worry about collision yet
Repo URL https://iam.colum.edu:8443/svn/GPMonogame3/trunk/SP15