DXフレームワーク　リファレンス・マニュアル 0.01 DXフレームワークのリファレンスです。詳細は公式wiki

- メインページ
- 関連ページ
- クラス
- ファイル

- ファイル一覧

Sprite派生.h
1 #pragma once
2 #include "Sprite.h"
3
4 namespace DXFW
5 {
19 class SpImage : public Sprite
20 {
21 private:
22 const Image *image;
23
24 SpImage(const SpImage* prototype):
25 Sprite( prototype ),
26 image(prototype->image)
27 {}
28
29 public:
30 SpImage(const Image &image ):
31 image(&image)
32 {}
33
34 SpImage(const Image *image ):
35 image(image)
36 {}
37
38 Sprite* Clone() const
39 {
40 return new SpImage( this );
41 }
42
43 void Draw( double x , double y , bool isCamera)
44 {
45 if( isCamera )
46 {
47 image->DrawRotateAxis( (int)GetX( x , Camera::Now() ) , (int)GetY( y , Camera::Now() ) ,
48 (int)(axisX * Camera::Now()->GetZoom() ) + image->GetHeight() / 2,
49 (int)(axisY * Camera::Now()->GetZoom() ) + image->GetHeight() / 2,
50 zoomX * Camera::Now()->GetZoom() ,
51 zoomY * Camera::Now()->GetZoom() ,
52 angle , isTurn);
53 }else{
54 image->DrawRotateAxis( (int)GetX( x ) , (int)GetY( y ) ,
55 (int)axisX + image->GetHeight() / 2,
56 (int)axisY + image->GetHeight() / 2,
57 zoomX ,
58 zoomY ,
59 angle , isTurn);
60 }
61 }
62
63 };
64
78 class SpAnime : public Sprite
79 {
80 private:
81 Anime &anime;
82 Anime::Counter counter;
83 double aniSpeed;
84
85 SpAnime(const SpAnime* prototype) :
86 Sprite( prototype ),
87 anime( prototype->anime ),
88 counter( prototype->counter ),
89 aniSpeed( prototype->aniSpeed )
90 {}
91 public:
92
93 SpAnime(Anime &anime , double aniSpeed = 1) :
94 anime( anime ),
95 counter( anime ),
96 aniSpeed( aniSpeed )
97 {}
98
99 void AnimeUpdate()
100 {
101 counter.UpDate( aniSpeed );
102 };
103
104 Sprite* Clone() const
105 {
106 return new SpAnime( this );
107 }
108
109 void Draw( double x , double y ,bool isCamera)
110 {
111 if( isCamera )
112 {
113 anime[counter.GetFrame()]->DrawRotateAxis( (int)GetX( x , Camera::Now()) , (int)GetY( y , Camera::Now()) ,
114 (int)(axisX * Camera::Now()->GetZoom()) + anime.GetWidth() / 2,
115 (int)(axisY * Camera::Now()->GetZoom()) + anime.GetHeight() / 2,
116 zoomX * Camera::Now()->GetZoom() ,
117 zoomY * Camera::Now()->GetZoom(),
118 angle ,
119 isTurn);
120 }
121 else
122 {
123 anime[counter.GetFrame()]->DrawRotateAxis( (int)GetX(x) , (int)GetY(y) ,
124 (int)axisX + anime.GetWidth() / 2,
125 (int)axisY + anime.GetHeight() / 2,
126 zoomX ,
127 zoomY ,
128 angle , isTurn);
129 }
130 }
131 };
132
146 class SpFont : public Sprite
147 {
148 private:
149 const IFont &font;
150 std::string str;
151 int rgb;
152
153 SpFont(const SpFont *prototype ):
154 Sprite( prototype ),
155 font( prototype->font),
156 rgb( prototype->rgb ),
157 str( prototype->str )
158 {}
159 public:
160 SpFont(const IFont &font , int rgb , const char *str ):
161 Sprite( ),
162 font(font),
163 rgb(rgb),
164 str(str)
165 {}
166
167 Sprite* Clone() const
168 {
169 return new SpFont( this );
170 }
171
172 void Draw( double x , double y ,bool isCamera)
173 {
174 if( isCamera )
175 {
176 font.DrawExtend( (int)GetX( x , Camera::Now() ) , (int)GetY( y , Camera::Now() ) , zoomX * Camera::Now()->GetZoom() , zoomY * Camera::Now()->GetZoom() , rgb , str.c_str() );
177 }
178 else
179 {
180 font.DrawExtend( (int)GetX( x ) , (int)GetY( y ) , zoomX , zoomY , rgb , str.c_str() );
181 }
182 }
183 };
184
198 class SpBmpFrame : public Sprite
199 {
200 private:
201 const BmpFrame &bmpFrame;
202 double width;
203 double height;
204
205 SpBmpFrame(const SpBmpFrame *prototype ):
206 Sprite( prototype ),
207 bmpFrame( prototype->bmpFrame),
208 width( prototype->width),
209 height( prototype->height)
210 {}
211
212 public:
213 SpBmpFrame(const BmpFrame &bmpFrame , double width , double height ):
214 Sprite(),
215 bmpFrame(bmpFrame),
216 width(width),
217 height(height)
218 {}
219
220 Sprite* Clone() const
221 {
222 return new SpBmpFrame( this );
223 }
224
225 void Draw( double x , double y ,bool isCamera)
226 {
227 if( isCamera )
228 {
229 bmpFrame.Draw( (int)GetX( x , Camera::Now() ) , (int)GetY( y , Camera::Now() ) ,
230 (int)(width * zoomX * Camera::Now()->GetZoom()) ,
231 (int)(height * zoomY * Camera::Now()->GetZoom()));
232 }
233 else
234 {
235 bmpFrame.Draw( (int)GetX( x ) , (int)GetY( y ) ,
236 (int)(width * zoomX) ,
237 (int)(height * zoomY) );
238 }
239 }
240 };
241
242
245 class SpMap : public Sprite
246 {
247 private:
248 ImagePack &chip;
249 int width;
250 int height;
251 int rotate;
252 std::vector< std::vector<int> > data;
253
254 public:
255
256 SpMap( ImagePack& マップチップ , const char* ディレクトリ名 , const char* ファイル名 , int 幅 , int 高さ , int 角度):
257 width(幅),
258 height(高さ),
259 rotate(角度),
260 chip(マップチップ)
261 {
262 File::SetDirectory( ディレクトリ名 );
263 File csvFile( ファイル名 , FileMode::Read );
264
265 data.resize( 幅 );
266
267 for(int i=0 ; i<幅 ;i++)
268 {
269 data[i].resize( 高さ );
270 }
271
272 std::vector<std::string> lineBuf;
273
274 for(int i = 0 ; i < 高さ ; i++ )
275 {
276 csvFile.GetLineCSV( lineBuf );
277 for( int j = 0 ; j < 幅 ; j++)
278 {
279 data[j][i] = atoi( lineBuf[j].c_str() );
280 }
281 lineBuf.clear();
282 }
283 }
284
285 void Draw( double X座標 , double Y座標 ,bool カメラ有りフラグ)
286 {
287 const int chipW = chip.GetWidth();
288 const int chipH = chip.GetHeight();
289
290 if( カメラ有りフラグ )
291 {
292 const int baseY = int(Camera::Now()->TranY( Y座標 ));
293 const int baseX = int(Camera::Now()->TranX( X座標 ));
294
295 int posXA;
296 int posYA;
297 int posXB;
298 int posYB;
299
300 for(int i=0 ; i<width ; ++i )
301 {
302 posXA = int( baseX + chipW * i * Camera::Now()->GetZoom() );
303 posXB = int( baseX + chipW * (i+1) * Camera::Now()->GetZoom() );
304
305 for(int j=0 ; j<height ; ++j )
306 {
307 posYA = int( baseY + chipH * j * Camera::Now()->GetZoom() );
308 posYB = int( baseY + chipH * (j+1) * Camera::Now()->GetZoom() );
309 const int no = data[i][j];
310 if( no == 0 ) continue;
311 chip[no]->DrawExtend( posXA , posYA , posXB , posYB );
312 }
313 }
314 }else{
315 for(int i=0 ; i<width ; ++i )
316 {
317 for(int j=0 ; j<height ; ++j )
318 {
319 const int no = data[i][j];
320 if( no == 0 ) continue;
321 chip[no]->Draw( int(X座標 + i*chipW) , int(Y座標 + j*chipH) );
322 }
323 }
324 }
325 }
326
327 };
328
329 }
DXFW::Sprite::GetX
double GetX(double x, Camera *camera=nullptr)
説明
Definition: Sprite.h:174
DXFW::File
説明
Definition: File.h:30
DXFW::ImagePack::GetWidth
int GetWidth() const
最大幅を取得
Definition: Image.h:410
DXFW::ImagePack
複数のImageをまとめるクラス
Definition: Image.h:306
DXFW::SpAnime
説明
Definition: Sprite派生.h:78
DXFW::SpFont
説明
Definition: Sprite派生.h:146
DXFW::ImagePack::GetHeight
int GetHeight() const
最大高さを取得
Definition: Image.h:416
DXFW::Sprite::GetY
double GetY(double y, Camera *camera=nullptr)
説明
Definition: Sprite.h:181
DXFW::Image::DrawRotateAxis
bool DrawRotateAxis(int x, int y, int X軸, int Y軸, double 拡大率, double 角度, bool 反転フラグ=false) const
回転軸、角度、拡大率を指定して描画
Definition: Image.h:203
DXFW::SpImage
説明
Definition: Sprite派生.h:19
DXFW::File::SetDirectory
static void SetDirectory(const char *ディレクトリ名)
summary&gt;ファイルを閉じる
Definition: File.h:95
DXFW::SpMap
Definition: Sprite派生.h:245
DXFW::Anime::Counter
コマの管理
Definition: Anime.h:46
DXFW::Sprite
クラス説明
Definition: Sprite.h:28
DXFW::File::GetLineCSV
bool GetLineCSV(std::vector< std::string > &strSet)
Definition: File.h:190
DXFW::Image
画像クラス。ロードしたファイルの描画等。
Definition: Image.h:51
DXFW::IFont
説明
Definition: IFont.h:18
DXFW::Camera::GetZoom
double GetZoom()
summary&gt;追跡方法を設定
Definition: Camera.h:138
DXFW::Anime::Counter::UpDate
bool UpDate(double 経過フレーム)
summary&gt;現在のコマ番号を取得
Definition: Anime.h:64
DXFW::SpBmpFrame
説明
Definition: Sprite派生.h:198
DXFW::SpAnime::AnimeUpdate
void AnimeUpdate()
説明
Definition: Sprite派生.h:99
DXFW::Camera::Now
static Camera * Now()
Definition: Camera.h:66
DXFW::Anime
まとめたImageをコマ送りアニメーションとして扱うクラス
Definition: Anime.h:38
DXFW::BmpFrame
カスタマイズした枠のクラス
Definition: BmpFrame.h:22
DXFW::Image::GetHeight
int GetHeight() const
高さを取得
Definition: Image.h:258
DXFW::Anime::Counter::GetFrame
int GetFrame()
summary&gt;コマの位置を設定
Definition: Anime.h:102