View difference between Paste ID: JqNVKVjS and EHH5cDhT
SHOW: | | - or go back to the newest paste.
1
// FILE: 'shooter.as'
2
3
package  {
4
	import flash.display.MovieClip;
5
	import flash.text.TextField;
6
	import flash.ui.Keyboard;
7
	import flash.events.KeyboardEvent;
8
	import flash.events.Event;
9
	import Ship;
10
	import Bullet;
11
	import Util;
12
	
13
	public class shooter extends MovieClip {
14
		
15
		private var s: Ship;
16-
		private var keyChain: Array;
16+
17
		private var keyPressed:Object = { };
18
		private var lbl: TextField;
19
		
20
		public function shooter() {
21
			// constructor code
22
			
23
			lbl = new TextField();
24
			lbl.text = 'Click anywhere on the canvas to give focus.\nArrow keys move around, space fires bullets.'
25
			lbl.selectable = false;
26
			lbl.width = 400;
27
			lbl.x = 12;
28
			lbl.y = 12;
29
			this.stage.addChild(lbl);
30
			
31
			s = new Ship();
32
			s.x = 275;
33
			s.y = 200;
34
			s.rotation = -90;
35
			this.stage.addChild(s);
36
			
37
			this.stage.addEventListener(KeyboardEvent.KEY_DOWN, on_keydown);
38-
			keyChain = new Array();
38+
39-
			for (var i = 0; i < 5; ++i) {
39+
40-
				keyChain.push(false);
40+
41
			bullet_timeout = 0;
42
		}
43
		
44
		private function on_keydown(e: KeyboardEvent) {
45
			keyPressed[e.keyCode] = true;
46
		}
47
		
48
		private function on_keyup(e: KeyboardEvent) {
49
			keyPressed[e.keyCode] = false;
50
		}
51
		
52
		private function on_enterframe(e: Event) {
53
			if (keyPressed[Keyboard.LEFT]) {
54
				s.rotation -= 3;
55
			}
56
			if (keyPressed[Keyboard.RIGHT]) {
57
				s.rotation += 3;
58
			}
59
			if (keyPressed[Keyboard.UP]) {
60
				s.x += Math.cos(Util.deg2rad(s.rotation))*3;
61
				s.y += Math.sin(Util.deg2rad(s.rotation))*3;
62
			}
63
			if (keyPressed[Keyboard.DOWN]) {
64
				s.x -= Math.cos(Util.deg2rad(s.rotation))*5;
65
				s.y -= Math.sin(Util.deg2rad(s.rotation))*5;
66
			}
67
			if (keyPressed[Keyboard.SPACE]) {
68
				if (bullet_timeout >= 5) {
69
					var x1, x2, y1, y2;
70
					x1 = s.x + Math.cos(Util.deg2rad(s.rotation+15))*20;
71
					y1 = s.y + Math.sin(Util.deg2rad(s.rotation+15))*20;
72
					x2 = s.x + Math.cos(Util.deg2rad(s.rotation-15))*20;
73
					y2 = s.y + Math.sin(Util.deg2rad(s.rotation-15))*20;
74
					var b1 = new Bullet(x1, y1, s.rotation);
75
					var b2 = new Bullet(x2, y2, s.rotation);
76
					this.stage.addChild(b1);
77
					this.stage.addChild(b2);
78
					bullet_timeout = 0;
79
				} else {
80
					bullet_timeout++;
81
				}
82
			}
83
		}
84
	}
85
}
86
87
// FILE 'Ship.as'
88
89
package  {
90
	import flash.display.MovieClip;
91
	
92
	public class Ship extends MovieClip {
93
94
		public function Ship() {
95
			// draw ship
96
			with (this.graphics) {
97
				lineStyle (1, 0x000000, 1);
98
				moveTo(15, 0);
99
				lineTo(-15, 7.5);
100
				lineTo(-15, -7.5);
101
				lineTo(15, 0);
102
			}
103
		}
104
	}
105
}
106
107
// FILE 'Bullet.as'
108
109
package  {
110
	import flash.events.Event;
111
	import flash.display.MovieClip;
112
	import Util;
113
	
114
	public class Bullet extends MovieClip {
115
116
		public function Bullet(nx, ny, nrotation: Number) {
117
			// constructor code
118
			with (this.graphics) {
119
				lineStyle (1, 0x000000, 1);
120
				drawRect(-5, -2, 10, 4);
121
			}
122
			
123
			this.x = nx;
124
			this.y = ny;
125
			this.rotation = nrotation;
126
			
127
			this.addEventListener(Event.ENTER_FRAME, on_enterframe);
128
		}
129
130
		private function on_enterframe(e: Event) {
131
			if (this.x<=0 || this.x>=550 || this.y<=0 || this.y>=400) {
132
				this.removeEventListener(Event.ENTER_FRAME, on_enterframe);
133
				this.stage.removeChild(this);
134
			} else {
135
				this.x += Math.cos(Util.deg2rad(this.rotation))*7;
136
				this.y += Math.sin(Util.deg2rad(this.rotation))*7;
137
			}
138
		}
139
	}
140
}
141
142
// FILE 'Util.as'
143
144
package  {
145
	public class Util {
146
		public static function deg2rad(deg:Number):Number {
147
			return Math.PI*deg/180.0;
148
		}
149
	}
150
}