Hallo allemaal, ik ben bezig met het maken met een spelletje in flash. Nu dacht ik, laat ik het gelijk goed doen en het ook netjes in objecten programmeren. Nadat ik meerdere tutorials heb doorgelezen, heb ik een aardig idee hoe het zou moeten. Ik heb dus een begin gemaakt aan mijn weapon class, en het leek me aardig goed, maar dat wilde ik dus graag even controleren. (het is btw actionscript 2.0)
Ik heb de volgende directory structuur voor de classes:
En mijn weapon.as object ziet er als volgt uit:
Colt.as:
en sten.as:
Ik test mijn code met:
Mijn vragen hierover, uiteraard mag je ook slechts 1 van de vragen beantwoorden, als je alleen daar wat op of aan te merken hebt
:
Ik heb de volgende directory structuur voor de classes:
Classes |- Weapon.as |- Weapons (dir) |- Colt.as |- Sten.as
En mijn weapon.as object ziet er als volgt uit:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
| class Weapon { //STATIC DEFINES private static var AMMO_MAX:Number = 1000; private static var AMMO_LEFT:Number = 100; private static var AMMO_CLIP_SIZE:Number = 14; private static var AMMO_CLIP_LEFT:Number = 14; //DEFINES private var _ammoMax:Number = AMMO_MAX; private var _ammoLeft:Number = AMMO_LEFT; private var _ammoClipSize:Number = AMMO_CLIP_SIZE; private var _ammoClipLeft:Number = AMMO_CLIP_LEFT; private var _fireSound:Sound; private var _emptySound:Sound; //CONSTRUCTOR public function Weapon () { this._emptySound = new Sound(); this._emptySound.attachSound("emptychamber"); } // //SET FUNCTIONS // private function setMaxAmmo(max:Number) { this._ammoMax = max; } private function setAmmoClipSize(size:Number) { this._ammoClipSize = size; } private function setAmmoLeft(left:Number) { this._ammoLeft = left; } private function setAmmoClipLeft(left:Number) { this._ammoClipLeft = left; } // //GET FUNCTIONS // public function getAmmoClipLeft():Number { return this._ammoClipLeft; } public function getAmmoLeft():Number { return this._ammoLeft; } // //PUBLIC FUNCTIONS // public function attachSound(soundName:String) { this._fireSound = new Sound(); this._fireSound.attachSound(soundName); } public function shoot():Number { if(this._ammoClipLeft > 0) { if(this._fireSound) this._fireSound.start(); this._ammoClipLeft -= 1; return 1; } else{ this._emptySound.start(); return -1; } } public function reload() { this._ammoLeft += this._ammoClipLeft; this._ammoClipLeft = 0; if(this._ammoClipSize < this._ammoLeft) { this._ammoClipLeft = this._ammoClipSize; this._ammoLeft -= this._ammoClipSize; }else{ this._ammoClipLeft = this._ammoLeft; this._ammoLeft = 0; } } } |
Colt.as:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| class Weapons.Colt extends Weapon { //STATIC DEFINES private static var AMMO_MAX:Number = 1000; private static var AMMO_LEFT:Number = 100; private static var AMMO_CLIP_SIZE:Number = 14; private static var AMMO_CLIP_LEFT:Number = 14; private static var SOUND_NAME:String = "colt"; //CONSTRUCTOR public function Colt () { super(); setMaxAmmo(AMMO_MAX); setAmmoClipSize(AMMO_CLIP_SIZE); setAmmoLeft(AMMO_LEFT); setAmmoClipLeft(AMMO_CLIP_LEFT); attachSound(SOUND_NAME); } } |
en sten.as:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| class Weapons.Sten extends Weapon { //STATIC DEFINES private static var AMMO_MAX:Number = 2000; private static var AMMO_LEFT:Number = 200; private static var AMMO_CLIP_SIZE:Number = 30; private static var AMMO_CLIP_LEFT:Number = 30; private static var SOUND_NAME:String = "sten"; //CONSTRUCTOR public function Sten () { super(); setMaxAmmo(AMMO_MAX); setAmmoClipSize(AMMO_CLIP_SIZE); setAmmoLeft(AMMO_LEFT); setAmmoClipLeft(AMMO_CLIP_LEFT); attachSound(SOUND_NAME); } } |
Ik test mijn code met:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| weapon = new Weapon(); colt = new Weapons.Colt(); sten = new Weapons.Sten(); weapon = colt; _root.bckButton.onPress = function() { weapon.shoot(); } _root.stenButton.onPress = function() { weapon = sten; } _root.coltButton.onPress = function() { weapon = colt; } _root.reloadButton.onPress = function() { weapon.reload(); } |
Mijn vragen hierover, uiteraard mag je ook slechts 1 van de vragen beantwoorden, als je alleen daar wat op of aan te merken hebt
- Is dit inderdaad netjes OOP, of is dit waardeloos?
Als er grove fouten in zitten kun je me daar op wijzen zodat ik deze verder kan onderzoeken?
- Is de classe structeer zo correct (weapon.as vs. weaponS.colt)? En doe ik het inheriten op de juiste manier?
- Horen de sounds (en later graphics) zoals het nu is in de classes? of moet ik die ergens anders heen verplaatsen?
- Intern in de reload functie bv, is het daar beter om zoals ik nu doe rechtstreeks de variabelen aan te passen, of moet ik daar ook functies voor gebruiken (zodat je er meer restricties bv maximale waarde aan toe kunt kennen)?
- In de test code, is het netjes om zo de wapens te wisselen en te gebruiken?