質問するログイン新規登録

質問編集履歴

4

制約条件追加

2018/11/12 11:10

投稿

mijinko889
mijinko889

スコア33

title CHANGED
File without changes
body CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
 
4
4
  javascriptで記述した以下のようなコードがあるとします。
5
+ 制約条件
6
+ ・パーティに同じ名前のキャラは一人しか編成できない
7
+ ・パーティには控えはいない
8
+ ・キャラは違う処理をするスキルを持つ
9
+ ・ダメージを受けた時特有の反応をするキャラもいる
5
10
 
6
11
  ```CharacterData.js
7
12
  characters ={

3

追加説明

2018/11/12 11:10

投稿

mijinko889
mijinko889

スコア33

title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,6 @@
1
1
  ###前提
2
+
3
+
2
4
  javascriptで記述した以下のようなコードがあるとします。
3
5
 
4
6
  ```CharacterData.js
@@ -146,6 +148,9 @@
146
148
  }
147
149
  }
148
150
  ```
151
+ キャラ(charaClassオブジェクト)ごとに違うスキル、ステータスを保持しており、戦闘シーンでのメイン処理では分岐を使わず同じ呼び出し方で書きたいと思ってたどり着いたのが現状の書き方ですね。「キャラの持つスキルの内容」を一纏めにするためにAttackDateを作っています。
152
+
153
+ キャラを作成するのと同じようにスキルも作成しようと思ったのですが、引数にfunction()を渡すコールバック処理をcharacterclassオブジェクトに作っています。
149
154
  ```characterClass.js
150
155
  var
151
156
  member_size_X = member_size_Y=32,//サイズ

2

スクリプトの全容がわかるように編集しました

2018/11/12 10:49

投稿

mijinko889
mijinko889

スコア33

title CHANGED
File without changes
body CHANGED
@@ -1,9 +1,8 @@
1
1
  ###前提
2
2
  javascriptで記述した以下のようなコードがあるとします。
3
3
 
4
- ```javascript
4
+ ```CharacterData.js
5
-
6
- characters={
5
+ characters ={
7
6
  "主人公":{
8
7
  partyid:0,
9
8
  AttackDate:{
@@ -12,11 +11,344 @@
12
11
  Atk:function(){
13
12
  getDamage = partystetas[characters["主人公"].partyid].Pow;
14
13
  Damage(standEnemy[characters["主人公"].partyid],getDamage);
14
+ //console.log("aaa");
15
+ EnemySetting(characters["主人公"].partyid);
16
+ console.log(enemystetas.length);
15
17
  },
16
18
  },
19
+ SapportDate:{
20
+ discription:"SCORE上昇量1%up",
21
+ Sap:function(){
22
+ if(updatecounter % fps_*3 === 0){
23
+ for(var i=0;i<4;i++){
24
+ if(partystetas[i].Hp < partystetas[i].maxHP)
25
+ partystetas[i].Hp += 50;
26
+ }
27
+ }
28
+ }
29
+ },
30
+ Dam:function(){
31
+ Damage(this.partyid,getDamage);
32
+ },
33
+ Date:new CharacterData(
34
+ "img/characters/sprite_char1.jpg",//イメージuri
35
+ 0,//ID
36
+ "主人公",//表示名--パーティーデータ取得時に主キーにしてユーザー毎のキャラステータスを取得?
37
+ 1100,//最大HP
38
+ 1500,//攻撃力
39
+ 800,//防御力
40
+ "atk",//タイプ
41
+ "ヒューマン",//種族
42
+ "SR"//レアリティ
43
+ ),
44
+ },
45
+ "朱雀":{
46
+ partyid:0,
47
+ AttackDate:{
48
+ discription:"ターゲットに通常攻撃",
17
- ......}
49
+ count:10,
50
+ Atk:function(){
51
+ },
52
+ },
53
+ SapportDate:{
54
+ discription:"SCORE上昇量1%up",
55
+ Sap:function(){
56
+ if(updatecounter % fps_*5 === 0){
57
+ score_ += 10;
58
+ }
59
+ }
60
+ },
61
+ Dam:function(){
62
+ Damage(this.partyid,getDamage);
63
+ },
64
+ Date:new CharacterData(
65
+ "img/characters/sprite_char2.jpg",
66
+ 1,
67
+ "ヒロイン",
68
+ 1010,
69
+ 1020,
70
+ 200,
71
+ "enh",
72
+ "ヒューマン",
73
+ "SR"
74
+ ),
75
+ },
76
+ "白虎":{
77
+ partyid:0,
78
+ AttackDate:{
79
+ discription:"ターゲットに通常攻撃",
80
+ count:10,
81
+ Atk:function(){
82
+ console.log("aaap");
83
+ },
84
+ },
85
+ SapportDate:{
86
+ discription:"SCORE上昇量5%up",
87
+ Sap:function(){
88
+ if(updatecounter % fps_*3 === 0)
89
+ member_combCount[characters["プレイヤー"].partyid]+=1;
90
+ }
91
+ },
92
+ Dam:function(){
93
+ Damage(this.partyid,getDamage);
94
+ },
95
+ Date:new CharacterData(
96
+ "img/characters/sprite_char3.jpg",
97
+ 1,
98
+ "プレイヤー",
99
+ 1010,
100
+ 1020,
101
+ 200,
102
+ "enh",
103
+ "ヒューマン",
104
+ "SR"
105
+ ),
106
+ },
107
+ "玄武":{
108
+ partyid:0,
109
+ AttackDate:{
110
+ discription:"ターゲットに通常攻撃",
111
+ count:10,
112
+ Atk:function(){
113
+ console.log("捕ったど~");
114
+ },
115
+ },
116
+ SapportDate:{
117
+ discription:"SCORE上昇量5%up",
118
+ Sap:function(){
119
+ //console.log("Support3");
120
+ }
121
+ },
122
+ Dam:function(){
123
+ console.log("ダメージ受けたなり~");
124
+ Damage(this.partyid,getDamage);
125
+ },
126
+ Date:new CharacterData(
127
+ "img/characters/sprite_char3.jpg",
128
+ 1,
129
+ "玄武",
130
+ 1300,
131
+ 1520,
132
+ 300,
133
+ "def",
134
+ "オーガ",
135
+ "SSR"
136
+ ),
137
+ },
138
+ };
139
+
140
+ function EnemySetting(num){
141
+ if(standEnemy[num].Hp <= 0){
142
+ if(enemystetas.length > 0){
143
+ standEnemy[num]=(enemystetas.shift());
144
+ standEnemy[num].partyid = num;
145
+ }
146
+ }
147
+ }
18
148
  ```
149
+ ```characterClass.js
150
+ var
151
+ member_size_X = member_size_Y=32,//サイズ
152
+ partyspritesize_W=288,partyspritesize_H=32,
153
+ Damagestetas={
154
+ damage_:0,
155
+ type_:"ATK"//攻撃者のタイプ
156
+ },
157
+ getDamage=0;
158
+ //キャラクターデータクラス
159
+ function CharacterData(img,id,name,maxhp,maxpow,maxdeff,type,race,rera){
160
+ this.img=new Image(),
161
+ this.img.src=img;
162
+ this.id=id;
163
+ this.name=name;
164
+ this.Hp=maxhp;
165
+ this.Pow=maxpow;
166
+ this.Deff=maxdeff;
167
+ this.Type=type;
168
+ this.Race=race;
169
+ this.Rare=rera;
19
170
 
171
+ this.waitSprite = new AnimSprite(this.img,0,0,partyspritesize_W,partyspritesize_H,member_size_X,member_size_Y,3,1);
172
+ this.attackSprite= new AnimSprite(this.img,member_size_X*3,0,partyspritesize_W,partyspritesize_H,member_size_X,member_size_Y,3,1);
173
+ this.skillSprite= new AnimSprite(this.img,0,member_size_Y*2,partyspritesize_W,partyspritesize_H,member_size_X,member_size_Y,3,1);
174
+ this.damageSprite= new AnimSprite(this.img,0,member_size_Y*3,partyspritesize_W,partyspritesize_H,member_size_X,member_size_Y,3,1);
175
+ this.deadSprite= new AnimSprite(this.img,192,160,partyspritesize_W,partyspritesize_H,member_size_X,member_size_Y,3,1);
176
+
177
+ this.motionsprite= this.waitSprite ;
178
+
179
+ this.Atkfunction = function(atkfunc){
180
+ atkfunc();
181
+ };
182
+
183
+ this.Damagefunction=function(damagefunc){
184
+ damagefunc()
185
+ };
186
+
187
+ this.Sapportfunction=function(sapportfunc){
188
+ sapportfunc();
189
+ };
190
+ }
191
+
192
+
193
+ //基本的なダメージ処理
194
+ var
195
+ Damage = function(member,damage){
196
+ member.Hp -= damage;
197
+ },
198
+ //キャラ描画
199
+ Characterdtaw = function(charax_,charay_,sprite_){
200
+ sprite_.animdraw(ctx,charax_,charay_);
201
+ };
202
+
203
+ function charinit(){//呼び出し方の例
204
+ var
205
+ i,
206
+
207
+ chara1 = characters["主人公"],
208
+ chara2 = characters["ヒロイン"];
209
+
210
+
211
+ chara1.Date.Atkfunction(chara1.AttackDate.Atk);
212
+ chara2.Date.Sapportfunction(chara1.SapportDate.Sap);
213
+
214
+
215
+ }
216
+
217
+ function SetDamagest(Damagest,damage_,type_){
218
+ Damagest.damage_ = damage_;
219
+ Damagest.type_ = type_;
220
+
221
+ return Damagest;
222
+ }
223
+
224
+ function DamageCol(stetas_){
225
+ var getdamage;
226
+ getdamage = stetas_.damage_;//ダメージ計算
227
+
228
+ return getdamage;
229
+ }
230
+
231
+
232
+ ```
233
+ ```main.js
234
+ var
235
+ //////////////////////////////////////////////パーティオブジェクト/////////////////////////////////////////////////////
236
+ party=[
237
+ characters["主人公"],
238
+ characters["ヒロイン"],
239
+ characters["プレイヤー"],
240
+ characters["玄武"]
241
+ ],//4人
242
+ partystetas=[],
243
+
244
+ i=0,
245
+ STEPTIME = 10,
246
+ step=0;
247
+
248
+ function Partyinit(){
249
+ for(i=0;i<4;i++){
250
+ party[i].partyid = i;
251
+ partystetas[i]={
252
+ maxHP:party[i].Date.Hp,
253
+ Hp:party[i].Date.Hp,
254
+ maxpow:party[i].Date.Pow*5,
255
+ Pow:party[i].Date.Pow,
256
+ maxDef:party[i].Date.Deff*5,
257
+ def:party[i].Date.Deff,
258
+ specialgage:0
259
+ };
260
+ memberView[i]= {
261
+ hpvar:document.getElementById("HPbox_member"+(i+1)),
262
+ combcount:document.getElementById("Comb_member"+(i+1)),
263
+ iconimg:document.getElementById("membericonimg"+(i+1)),
264
+ Hp:document.getElementById("member"+(i+1)+"_stetas")
265
+ };
266
+ }
267
+ }
268
+
269
+ function getPartyMemberActionSkill(num){
270
+ if(partystetas[num].Hp > 0){//生存中だけ呼び出し
271
+ party[num].Date.Atkfunction(party[num].AttackDate.Atk);
272
+ }
273
+ }
274
+
275
+ function getPartyMemberSapportSkill(num){
276
+ party[num].Date.Sapportfunction(party[num].SapportDate.Sap);
277
+ }
278
+
279
+ function getPartyMemberDamageSkill(num){
280
+ party[num].Date.Dam();
281
+ }
282
+
283
+ function PartyStetasCheck(i){
284
+ if(partystetas[i].Hp <= 0){
285
+ party[i].Date.motionsprite=party[i].Date.deadSprite;
286
+
287
+ $("#member"+(i+1)+"-icon").addClass("deth");
288
+
289
+ $("#member"+(i+1)+"_stetas").css('color', 'Red');
290
+ $("#HPbox_member"+(i+1)).removeClass("alive");
291
+ $("#HPbox_member"+(i+1)).addClass("dead");
292
+
293
+ $("#member"+(i+1)+"-icon").removeClass("partymembers-icon");
294
+ partystetas[i].Hp++;
295
+ /*蘇生処理*/
296
+ if(partystetas[i].Hp > 0){
297
+
298
+ partystetas[i].Hp = partystetas[i].maxHP/2;
299
+ $("#member"+(i+1)+"-icon").addClass("partymembers-icon");
300
+ $("#member"+(i+1)+"-icon").removeClass("deth");
301
+
302
+ $("#HPbox_member"+(i+1)).addClass("alive");
303
+ $("#HPbox_member"+(i+1)).removeClass("dead");
304
+
305
+ }
306
+ if(Math.abs(partystetas[i].Hp) <= partystetas[i].maxHP){
307
+ memberView[i].iconimg.style.opacity=1-(-partystetas[i].Hp/partystetas[i].maxHP);
308
+ memberView[i].hpvar.style.width = (-partystetas[i].Hp/partystetas[i].maxHP)*100 +"%";
309
+ }
310
+ }else{
311
+ if(party[i].Date.motionsprite === party[i].Date.deadSprite){
312
+ party[i].Date.motionsprite = party[i].Date.waitSprite;
313
+ }
314
+ if($("#HPbox_member"+(i+1)).hasClass("dead")){
315
+ $("#HPbox_member"+(i+1)).removeClass("dead");
316
+ $("#HPbox_member"+(i+1)).addClass("alive");
317
+ }if( $("#member"+(i+1)+"-icon").hasClass("deth")){
318
+ $("#member"+(i+1)+"-icon").addClass("partymembers-icon");
319
+ $("#member"+(i+1)+"-icon").removeClass("deth");
320
+ }
321
+
322
+ $("#member"+(i+1)+"_stetas").css('color', 'Black');
323
+ memberView[i].hpvar.style.width = (partystetas[i].Hp/partystetas[i].maxHP)*100 +"%";
324
+ }
325
+ if(partystetas[i].Hp > partystetas[i].maxHP)partystetas[i].Hp = partystetas[i].maxHP;
326
+ }
327
+
328
+ function Party_Update(){
329
+ if(GameStage !== "GameOver"){
330
+ for(i=0;i<4;i++){
331
+ getPartyMemberSapportSkill(i);//Supportを毎時間呼び出す
332
+ PartyStetasCheck(i);
333
+ memberView[i].Hp.innerHTML=partystetas[i].Hp;
334
+ }
335
+ //全員の状態を調べる
336
+ for(i=0;i<4;i++){
337
+ if(partystetas[i].Hp > 0){
338
+ break;
339
+ }
340
+ }if(i===4) GameStage="GameOver";
341
+ }}
342
+
343
+
344
+ function Party_Draw(){
345
+ for(i=0;i<4;i++){//パーティメンバー描画
346
+ Characterdtaw(140+markerdistance,45+i*20,party[i].Date.motionsprite);//パーティー
347
+ }
348
+ }
349
+
350
+ ```
351
+
20
352
  この時、Atk:function()の中で書いている『characters["主人公"]』の部分を変数にして書きたいです。
21
353
 
22
354
  ###やりたいこと

1

誤字修正

2018/11/12 10:42

投稿

mijinko889
mijinko889

スコア33

title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,4 @@
1
- ###やりたいこと
1
+ ###前提
2
2
  javascriptで記述した以下のようなコードがあるとします。
3
3
 
4
4
  ```javascript