トップページ > 記事閲覧
円周に画像を表示させたい
名前:FFGX 日時: 2020/06/22 15:17

どうしたら円周に画像を表示させられますか? そして、回してあげたいのです。 どうすればいいですか。 アドバイスをください。
メンテ

Page: 1 |

Re: 円周に画像を表示させたい ( No.1 )
名前:名無三 日時:2020/06/22 19:13

DXLibと関係ない話ですので三角関数なりを用いて自力で実装してください。
メンテ
Re: 円周に画像を表示させたい ( No.2 )
名前:へけぽん 日時:2020/06/22 19:26

学校の数学の授業で三角関数をしっかり理解すると出来るようになります これは本当です、私もそうでした 学校の授業はゲーム作りに役に立つものが多いです
メンテ
Re: 円周に画像を表示させたい ( No.3 )
名前:FFGX(解決) 日時:2020/06/22 21:02

全然違う話をしていました。 すみませんでした。
メンテ
Re: 円周に画像を表示させたい ( No.4 )
名前:マーク42 日時:2020/06/22 22:56

お力になれるかわかりませんが、関数DrawRotaGraphは画像を回転させることができます。 引数Angleに定義した変数xを毎フレーム1ずつ減らしたり増やしたりすることで、時計回りや反時計回りに画像を回転させられると思います。 間違っていたらすいません。 こちらはDXライブラリのサイトのサンプルプログラムを少しいじり画像が回転するようにしたものです。何か参考になればよいです。 #include "DxLib.h" #define PI 3.1415926535897932384626433832795f int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { SetGraphMode(1470, 780, 32); // ウィンドウの大きさを指定 ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用 SetWindowSizeExtendRate(1.0f); SetDrawScreen(DX_SCREEN_BACK); // 裏画面を使用する設定 int GHandle; int x = 0; if (DxLib_Init() == -1) // DXライブラリ初期化処理 { return -1; // エラーが起きたら直ちに終了 } while (ProcessMessage() == 0) { ++x; // test1.bmpの読み込み GHandle = LoadGraph("charall.png"); // 読みこんだグラフィックを回転描画 DrawRotaGraph(320, 240, 1.5f, (PI / 2) - x, GHandle, TRUE); } // 読み込んだ画像のグラフィックハンドルを削除 DeleteGraph(GHandle); WaitKey(); // 結果を見るためにキー待ち(『WaitKey』を使用) DxLib_End(); // DXライブラリ使用の終了処理 return 0; // ソフトの終了 }
メンテ
Re: 円周に画像を表示させたい ( No.5 )
名前:名無三 日時:2020/06/23 05:42

ハランデイイ これだとscreenflipがないし表示されないでしょ…人に教えるのは自分が理解できてからにして。 FFGXさんは参考にはしないでくださいね、この方のプログラムは ・画像を無限に読み込み、drawrotagraphでバックバッファーに書き込んでいる だけです。中途半端なサイズの黒いウィンドウが表示され、さらには実行中常にメモリを喰われ続けるだけなので参考にしてはいけません。 追記:表示されている理由はわかりません(processmessageに想定外の動作に備えて表面に映す部分があるのではと思います) メモリ喰いはvisual studioで見ればすぐわかるでしょう。 while(ProcessMessage()==0){ SetDrawScreen(DX_SCREEN_BACK); ClearDrawScreen(); //描画 ScreenFlip(); } が基本スタンスのはずです
メンテ
Re: 円周に画像を表示させたい ( No.6 )
名前:マーク42 日時:2020/06/23 02:02

私の方ではちゃんと表示されたのですが、、、。 少しは参考になればと思ったのですが。 やはり私はまだまだ未熟です。なので今後は解答しないようにします。
メンテ
Re: 円周に画像を表示させたい ( No.7 )
名前:B.E 日時:2020/06/23 02:47

画像を円状に配置して回転させたいって事ですかね? 座標を回転させて、それと同じ角度で回転させた画像をDrawRotaGraph()で描画すれば出来ると思いますよ。 とりあえず、二次元座標を回転させる関数はDXライブラリにはないっぽいんで、 他の方が言ってるように自前で計算するしかないと思いますよ。 ↓以下画像を円状に配置して回転させるサンプル。 #include "DxLib.h" #include <math.h>//←サインとかコサインとか使うときに必要です //とりあえず座標回転関数(ネットで調べたののまるパクリですが…) //xc、ycを中心にx、 y座標をAngle(ラジアンで指定・時計回り)で回転させたのをX、Yに返します void rotation2D(int* X, int* Y, int x, int y, int xc, int yc, double Angle) { *X = int((x - xc) * cos(Angle) - (y - yc) * sin(Angle) + xc); *Y = int((x - xc) * sin(Angle) + (y - yc) * cos(Angle) + yc); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // ウインドウモードで起動 ChangeWindowMode(TRUE); SetGraphMode(800, 600, 32); if (DxLib_Init() < 0) return -1; // 描画先を裏画面に SetDrawScreen(DX_SCREEN_BACK); //変数宣言 int X, Y; double Angle = 0, angle; //画像読み込み(大体100x100位のサイズの画像を想定してます) int GrHandle = LoadGraph("Test.png"); while (ProcessMessage() == 0) { //画面クリア ClearDrawScreen(); //円状に画像を12個描画 for (int i = 0; i < 12; i ++) { //角度指定※DX_PIはDXライブラリで登録されてる定数でπ(ラジアンで180度)が定義されてます angle = Angle +(DX_PI / 6 * i); //座標を回転させる rotation2D(&X, &Y, 400, 100, 400, 300, angle); //画像を回転描画 DrawRotaGraph(X, Y, 1, angle, GrHandle, TRUE, FALSE); } // 裏画面の内容を表画面に ScreenFlip(); //基準座標回転角度加算※DX_TWO_PIはDXライブラリで登録されてる定数でπの二倍(ラジアンで360度)が定義されてます Angle += DX_TWO_PI / 720; if (Angle > DX_TWO_PI)Angle -= DX_TWO_PI; } //終了処理 DxLib_End(); return 0; }
メンテ
Re: 円周に画像を表示させたい ( No.8 )
名前:FFGX(解決) 日時:2020/06/28 14:24

すみません、皆様。 自分なりに三角関数を使い、実現できました。 多分僕の語彙力が足りなかったのでしょう。 皆様、誠にありがとうございます。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存