1 /**
2 A class to represent the player on the screen
3 @author <a href="mailto:matthewcasperson@gmail.com">Matthew Casperson</a>
4 @class
5 */
6 function Player()
7 {
8 /** The speed that the player moves at
9 @type Number
10 */
11 this.speed = 75;
12 /** True if the player is moving left, false otherwise
13 @type Boolean
14 */
15 this.left = false;
16 /** True if the player is moving right, false otherwise
17 @type Boolean
18 */
19 this.right = false;
20
21 /**
22 Initialises this object
23 */
24 this.startupPlayer = function()
25 {
26 this.startupAnimatedGameObject(g_idle_left, 300, 350, 4, 6, 20);
27 return this;
28 }
29
30 /**
31 Called when a key is pressed
32 @param event Event Object
33 */
34 this.keyDown = function(event)
35 {
36 var updateRequired = false;
37
38 // left
39 if (event.keyCode == 37 && !this.left)
40 {
41 this.left = true;
42 updateRequired = true;
43 }
44 // right
45 if (event.keyCode == 39 && !this.right)
46 {
47 this.right = true;
48 updateRequired = true;
49 }
50
51 if (updateRequired)
52 this.updateAnimation();
53
54 }
55
56 /**
57 Called when a key is pressed
58 @param event Event Object
59 */
60 this.keyUp = function(event)
61 {
62 // left
63 if (event.keyCode == 37)
64 {
65 this.left = false;
66 this.setAnimation(g_idle_left, 6, 20);
67 }
68 // right
69 if (event.keyCode == 39)
70 {
71 this.right = false;
72 this.setAnimation(g_idle_right, 6, 20);
73 }
74
75 this.updateAnimation();
76 }
77
78 /**
79 Updates the current animation depending on the movement
80 of the player. This accounts for the fact that both
81 the left and right arrow keys can be pressed at the
82 same time.
83 */
84 this.updateAnimation = function()
85 {
86 if (this.right && this.left)
87 this.setAnimation(g_idle_left, 6, 20);
88 else if (this.right)
89 this.setAnimation(g_run_right, 12, 20);
90 else if (this.left)
91 this.setAnimation(g_run_left, 12, 20);
92 }
93
94 /**
95 Updates the object
96 @param dt The time since the last frame in seconds
97 @param context The drawing context
98 @param xScroll The global scrolling value of the x axis
99 @param yScroll The global scrolling value of the y axis
100 */
101 this.update = function (/**Number*/ dt, /**CanvasRenderingContext2D*/context, /**Number*/ xScroll, /**Number*/ yScroll)
102 {
103 if (this.left)
104 this.x -= this.speed * dt;
105 if (this.right)
106 this.x += this.speed * dt;
107
108 // modify the xScroll value to keep the player on the screen
109 if (this.x > context.canvas.width - this.frameWidth + xScroll)
110 g_GameObjectManager.xScroll = this.x - (context.canvas.width - this.frameWidth);
111 if (this.x < xScroll)
112 g_GameObjectManager.xScroll = this.x;
113 }
114 }
115
116 Player.prototype = new AnimatedGameObject;
Top