回答編集履歴

2

文法の修正です。

2015/12/26 13:09

投稿

ThanaMori
ThanaMori

スコア12

test CHANGED
@@ -1,4 +1,4 @@
1
- グループと同じサイズのスプライトを新たに作ってグループに貼り付けておき、
1
+ グループと同じサイズのスプライトかなんかを新たに作ってグループに貼り付けておき、
2
2
 
3
3
  それを用いて当たり判定を行うなんて言うのはどうでしょうか。
4
4
 

1

ソースコードを載せました。

2015/12/26 13:09

投稿

ThanaMori
ThanaMori

スコア12

test CHANGED
@@ -31,3 +31,181 @@
31
31
  もし、グループを動かしたら、連動して同じように動かす…
32
32
 
33
33
  という感じです。
34
+
35
+
36
+
37
+ 以下のようにしてはどうでしょうか。
38
+
39
+ ```
40
+
41
+ enchant();
42
+
43
+
44
+
45
+ // imageフォルダにchara1.pngがあることが前提です。
46
+
47
+ var chara = "image/chara1.png"
48
+
49
+ var Assets = [chara]
50
+
51
+
52
+
53
+ window.onload = function(){
54
+
55
+ var game = new Game(320,320);
56
+
57
+ game.preload(Assets);
58
+
59
+ game.fps = 30;
60
+
61
+ game.rootScene.backgroundColor = "black";
62
+
63
+ game.onload = function(){
64
+
65
+
66
+
67
+ // クラスにしなくてもよいと思います。
68
+
69
+ var Bear = Class.create(Sprite, {
70
+
71
+ initialize: function(x, y){
72
+
73
+ Sprite.call(this, 32, 32);
74
+
75
+ this.image = game.assets[chara];
76
+
77
+ this.x = x;
78
+
79
+ this.y = y;
80
+
81
+ }
82
+
83
+ });
84
+
85
+
86
+
87
+ // クラスにしなくてもよいと思います。
88
+
89
+ // よい名前が思いつかなかったので、
90
+
91
+ // _をつけて元あるクラスを上書きしないようにしました。 すいません。
92
+
93
+ var _Entity = Class.create(Entity, {
94
+
95
+ initialize: function(w,h,x,y,color){
96
+
97
+ Entity.call(this, w, h)
98
+
99
+ this.width = w;
100
+
101
+ this.height = h;
102
+
103
+ this.x = x;
104
+
105
+ this.y = y;
106
+
107
+ this.backgroundColor = color;
108
+
109
+ }
110
+
111
+ });
112
+
113
+
114
+
115
+ var entity = new _Entity(100,100,100,100,"blue");
116
+
117
+ game.rootScene.addChild(entity);
118
+
119
+
120
+
121
+ var group = new Group();
122
+
123
+ game.rootScene.addChild(group);
124
+
125
+
126
+
127
+ // width:64 => スプライト(bear1,2)の横幅*2(横に2つならべグループ化しているため)
128
+
129
+ // height:32 => スプライト(bear1,2)の縦幅*1(縦に1つ並べてグループ化しているため)
130
+
131
+ var entity_test = new _Entity(64,32,50,50,"green");
132
+
133
+ // opacity(0~1まで)で透明度を変更できます。
134
+
135
+ // 0 <== 0.5 ==> 1
136
+
137
+ // 完全透明 半透明 透明でない
138
+
139
+ entity_test.opacity = 0;
140
+
141
+ group.addChild(entity_test);
142
+
143
+
144
+
145
+ var bear1 = new Bear(50, 50);
146
+
147
+ group.addChild(bear1);
148
+
149
+
150
+
151
+ var bear2 = new Bear(82, 50);
152
+
153
+ group.addChild(bear2);
154
+
155
+
156
+
157
+ group.onenterframe = function(){
158
+
159
+ if(game.input.left == true){ group.x -= 2; };
160
+
161
+ if(game.input.right == true){ group.x += 2; };
162
+
163
+ if(game.input.up == true){ group.y -= 2; };
164
+
165
+ if(game.input.down == true){ group.y += 2; };
166
+
167
+ };
168
+
169
+
170
+
171
+ game.rootScene.onenterframe = function(){
172
+
173
+ // 必要に応じて .within メソッドを使ってください。
174
+
175
+ // 四角に当たった => 青→赤
176
+
177
+ // 当たっていない => 赤(赤→青)
178
+
179
+ if(entity_test.intersect(entity)===true){
180
+
181
+ entity.backgroundColor = "red";
182
+
183
+ }else{
184
+
185
+ entity.backgroundColor = "blue";
186
+
187
+ };
188
+
189
+ };
190
+
191
+
192
+
193
+ };
194
+
195
+ game.start();
196
+
197
+ };
198
+
199
+ ```
200
+
201
+
202
+
203
+ 四角に当たっていない状態
204
+
205
+ ![四角に当たっていない状態](1610e45834d3b8b89cf6537d721b2fb7.jpeg)
206
+
207
+
208
+
209
+ 四角に当たっている状態
210
+
211
+ ![四角に当たっている状態](048f19ba6d9da184354d74411c58f0dd.jpeg)