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

質問編集履歴

6

あふぁふぁ

2016/08/13 09:34

投稿

canvas
canvas

スコア62

title CHANGED
File without changes
body CHANGED
@@ -82,8 +82,8 @@
82
82
  ```
83
83
 
84
84
  ###追記 - 改良してみました(2016-08-13 18:33)
85
- [http://codepen.io/anon/pen/BzrzOb
85
+ [http://codepen.io/anon/pen/RRvogR
86
- ](http://codepen.io/anon/pen/BzrzOb)
86
+ ](http://codepen.io/anon/pen/RRvogR)
87
87
  ひとまずMVCに分割出来ていますでしょうか?
88
88
 
89
89
  ```JavaScript

5

サークルの管理クラスを導入

2016/08/13 09:34

投稿

canvas
canvas

スコア62

title CHANGED
File without changes
body CHANGED
@@ -81,25 +81,32 @@
81
81
  }
82
82
  ```
83
83
 
84
- ###追記 - 改良してみました(2016-08-13 16:42)
84
+ ###追記 - 改良してみました(2016-08-13 18:33)
85
85
  [http://codepen.io/anon/pen/BzrzOb
86
86
  ](http://codepen.io/anon/pen/BzrzOb)
87
87
  ひとまずMVCに分割出来ていますでしょうか?
88
88
 
89
89
  ```JavaScript
90
+ //コントローラークラス
90
- function ViewController(canvasElement) {
91
+ function ViewController(canvasElement, circleList) {
91
92
 
93
+ var circleList = circleList;
92
94
  var canvas = canvasElement;
93
95
  var canvasView = new CanvasView(canvas.getContext("2d"));
94
96
  var stateMap = {
95
97
  isDragging: false
96
98
  }
99
+
97
- var circle = new Circle(20, 20, 20);
100
+ circleList.add(new Circle(20, 20, 20));
101
+ circleList.add(new Circle(60, 60, 20));
98
102
 
103
+ circleList.getList().forEach(function(circle) {
99
- canvasView.drawCircle(circle.getPosition(), circle.getRadius());
104
+ canvasView.drawCircle(circle.getPosition(), circle.getRadius());
105
+ })
100
106
 
107
+
101
108
  canvas.addEventListener("mousedown", function(event) {
102
- var isPointInCircle = circle.hitTest(event.offsetX, event.offsetY);
109
+ var isTouchedPointOnCircle = circle.hitTest(event.offsetX, event.offsetY);
103
110
 
104
111
  if (isPointInCircle === true) {
105
112
  stateMap.isDragging = true;
@@ -122,18 +129,38 @@
122
129
  }
123
130
 
124
131
 
132
+
133
+ //ビュークラス
125
134
  function CanvasView(context) {
126
135
  var context = context;
127
136
 
128
137
  this.drawCircle = function(position, radius) {
129
138
  context.beginPath();
130
139
  context.arc(position.x, position.y, radius, 0, Math.PI*2, false);
131
- context.stroke();
140
+ context.fill();
132
141
  }
133
142
 
134
143
  }
135
144
 
136
145
 
146
+ // circleの管理クラス
147
+ function CircleList() {
148
+
149
+ var list = [];
150
+
151
+ this.add = function(circle) {
152
+ list.push(circle);
153
+ }
154
+
155
+ this.getList = function() {
156
+ return list;
157
+ }
158
+
159
+ }
160
+
161
+
162
+
163
+ // circleのモデルクラス
137
164
  function Circle(x, y, radius) {
138
165
 
139
166
  var x = x + radius;
@@ -153,19 +180,14 @@
153
180
  return true;
154
181
  }
155
182
 
156
-
157
-
158
-
159
183
  }
160
184
 
161
185
 
162
186
 
163
- var controller = new ViewController(document.getElementById("canvas"));
187
+ var controller = new ViewController(document.getElementById("canvas"), new CircleList());
164
188
  ```
165
189
 
166
190
  ###今後実装予定の処理
167
- - 複数のサークルの描画
168
- - 複数のサークルを保持するクラスの導入
169
191
  - サークル同士のヒット判定
170
192
  - サークルとマウスダウン座標とのヒット判定
171
193
  - 複数のサークルのドラッグ&ドロップに対応

4

追記キング

2016/08/13 09:34

投稿

canvas
canvas

スコア62

title CHANGED
File without changes
body CHANGED
@@ -86,13 +86,6 @@
86
86
  ](http://codepen.io/anon/pen/BzrzOb)
87
87
  ひとまずMVCに分割出来ていますでしょうか?
88
88
 
89
- これから実装予定の処理としては以下があります。
90
- - 複数のサークルの描画
91
- - 複数のサークルを保持するクラスの導入
92
- - サークル同士のヒット判定
93
- - サークルとマウスダウン座標とのヒット判定
94
- - 複数のサークルのドラッグ&ドロップに対応
95
-
96
89
  ```JavaScript
97
90
  function ViewController(canvasElement) {
98
91
 
@@ -170,6 +163,14 @@
170
163
  var controller = new ViewController(document.getElementById("canvas"));
171
164
  ```
172
165
 
166
+ ###今後実装予定の処理
167
+ - 複数のサークルの描画
168
+ - 複数のサークルを保持するクラスの導入
169
+ - サークル同士のヒット判定
170
+ - サークルとマウスダウン座標とのヒット判定
171
+ - 複数のサークルのドラッグ&ドロップに対応
172
+ - サークルの上でクリックをするとサークルが選択状態になる
173
+ - サークルが選択状態の時にサークルを囲う矩形をドラッグすると、サークルが拡大縮小される
173
174
 
174
175
  ###補足事項
175
176
  下記のサイトでも質問を投稿しております。

3

追記

2016/08/13 07:57

投稿

canvas
canvas

スコア62

title CHANGED
File without changes
body CHANGED
@@ -84,6 +84,15 @@
84
84
  ###追記 - 改良してみました(2016-08-13 16:42)
85
85
  [http://codepen.io/anon/pen/BzrzOb
86
86
  ](http://codepen.io/anon/pen/BzrzOb)
87
+ ひとまずMVCに分割出来ていますでしょうか?
88
+
89
+ これから実装予定の処理としては以下があります。
90
+ - 複数のサークルの描画
91
+ - 複数のサークルを保持するクラスの導入
92
+ - サークル同士のヒット判定
93
+ - サークルとマウスダウン座標とのヒット判定
94
+ - 複数のサークルのドラッグ&ドロップに対応
95
+
87
96
  ```JavaScript
88
97
  function ViewController(canvasElement) {
89
98
 

2

改良コードを追記

2016/08/13 07:48

投稿

canvas
canvas

スコア62

title CHANGED
File without changes
body CHANGED
@@ -81,6 +81,87 @@
81
81
  }
82
82
  ```
83
83
 
84
+ ###追記 - 改良してみました(2016-08-13 16:42)
85
+ [http://codepen.io/anon/pen/BzrzOb
86
+ ](http://codepen.io/anon/pen/BzrzOb)
87
+ ```JavaScript
88
+ function ViewController(canvasElement) {
89
+
90
+ var canvas = canvasElement;
91
+ var canvasView = new CanvasView(canvas.getContext("2d"));
92
+ var stateMap = {
93
+ isDragging: false
94
+ }
95
+ var circle = new Circle(20, 20, 20);
96
+
97
+ canvasView.drawCircle(circle.getPosition(), circle.getRadius());
98
+
99
+ canvas.addEventListener("mousedown", function(event) {
100
+ var isPointInCircle = circle.hitTest(event.offsetX, event.offsetY);
101
+
102
+ if (isPointInCircle === true) {
103
+ stateMap.isDragging = true;
104
+ console.log("ドラッグを開始");
105
+ }
106
+ });
107
+
108
+ canvas.addEventListener("mousemove", function(event) {
109
+ if (stateMap.isDragging === true) {
110
+ console.log("ドラッグ中");
111
+ }
112
+ });
113
+
114
+ canvas.addEventListener("mouseup", function(event) {
115
+ stateMap.isDragging = false;
116
+ console.log("ドラッグ終了");
117
+
118
+ });
119
+
120
+ }
121
+
122
+
123
+ function CanvasView(context) {
124
+ var context = context;
125
+
126
+ this.drawCircle = function(position, radius) {
127
+ context.beginPath();
128
+ context.arc(position.x, position.y, radius, 0, Math.PI*2, false);
129
+ context.stroke();
130
+ }
131
+
132
+ }
133
+
134
+
135
+ function Circle(x, y, radius) {
136
+
137
+ var x = x + radius;
138
+ var y = y + radius;
139
+ var radius = radius;
140
+
141
+ this.getPosition = function() {
142
+ return {x: x, y: y};
143
+ }
144
+
145
+ this.getRadius = function() {
146
+ return radius;
147
+ }
148
+
149
+ this.hitTest = function(x, y) {
150
+ console.log("ヒット判定の実装をする");
151
+ return true;
152
+ }
153
+
154
+
155
+
156
+
157
+ }
158
+
159
+
160
+
161
+ var controller = new ViewController(document.getElementById("canvas"));
162
+ ```
163
+
164
+
84
165
  ###補足事項
85
166
  下記のサイトでも質問を投稿しております。
86
167
  こちらのteratailを見つける前に投稿したのですが、下記サイトに投稿した質問が削除出来なかった為、質問はそのままになっております。

1

リファクタリングのタグを追加

2016/08/13 07:45

投稿

canvas
canvas

スコア62

title CHANGED
File without changes
body CHANGED
File without changes