質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

Q&A

解決済

3回答

2265閲覧

DxLibで線を色を繰り返しながら描画したい

kurira

総合スコア28

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

0グッド

0クリップ

投稿2020/11/14 04:59

編集2020/11/14 05:02

DxLibで、線の描画を繰り返し、(説明するのがちょっと難しいのですがイメージとしては)ジャマイカの国旗のような形を作りたいです。
斜めの線を、中心を軸に時計回りさせる感じです。
また、線が動いた軌跡を虹にしたいです。

#include "DxLib.h" int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC) { int i, a, R,O,Y,G,B,A,P; ChangeWindowMode(TRUE); if (DxLib_Init() == -1) { return -1; } R= GetColor(255, 0, 0); O =GetColor(255, 100, 0); Y = GetColor(255, 255, 0); G = GetColor(0, 255, 0); B = GetColor(0, 0, 255); A = GetColor(75, 0, 255); P = GetColor(255, 0, 255); for (i = 0; i < 640; i++){ for (a = 640; a > 0; a--) { ClearDrawScreen(); DrawLine(i, 0, a, 480,P); ScreenFlip(); } } ScreenFlip(); WaitKey(); DxLib_End(); return 0; }

上記のようなソースを書きました。

わからないところとしましては、

①実行すると、(0,0)を軸に線が動いています。これを、上の点は右に向かって、下の点は左に向かって、まるで中心を軸に斜めの線が動いているように見せたい

②軌跡(線の残像)を表示して、色をR,O,Y,G,B,A,P,R,O・・・の順に繰り返したいところです。このとき、塗りつぶしでグラデーションをつけるのではなく、Rの線、Oの線、Yの線・・・と繰り返している感じにしたいです。

説明が下手くそ、DxLibを初めて使うため知識のないこと、大変申し訳ありません。
もしわかる方いらっしゃいましたら、教えていただけると嬉しいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

...こんなん?

C++

1#include <DxLib.h> 2 3int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { 4 SetGraphMode(640, 480, 32); 5 ChangeWindowMode(TRUE); 6 if (DxLib_Init() == -1) return -1; 7 SetDrawScreen(DX_SCREEN_BACK); 8 9 unsigned int colors[7] = { 10 GetColor(255, 0, 0), 11 GetColor(255, 100, 0), 12 GetColor(255, 255, 0), 13 GetColor( 0, 255, 0), 14 GetColor( 0, 0, 255), 15 GetColor( 75, 0, 255), 16 GetColor(255, 0, 255), 17 }; 18 19 int color_index = 0; 20 while (ProcessMessage() == 0) { 21 ClearDrawScreen(); 22 for (int i = 0; i < 640; i++) { 23 DrawLine(i, 0, 640-i, 480, colors[color_index]); 24 color_index = (color_index+1)%7; 25 } 26 ScreenFlip(); 27 } 28 DxLib_End(); 29 return 0; 30}

投稿2020/11/14 13:32

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kurira

2020/11/15 02:26

ご丁寧にありがとうございます!
guest

0

ベストアンサー

イメージとは違うかもしれませんがこんな感じでどうでしょうか。

C++

1#include "DxLib.h" 2int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC) 3{ 4 int i, a, R, O, Y, G, B, A, P; 5 ChangeWindowMode(TRUE); 6 if (DxLib_Init() == -1) { 7 return -1; 8 } 9 R = GetColor(255, 0, 0); 10 O = GetColor(255, 100, 0); 11 Y = GetColor(255, 255, 0); 12 G = GetColor(0, 255, 0); 13 B = GetColor(0, 0, 255); 14 A = GetColor(75, 0, 255); 15 P = GetColor(255, 0, 255); 16 int Colors[] = { R,O,Y,G,B,A,P }; 17 int count = 0; 18 i = 0; 19 // for (i = 0; i < 640; i++) { 20 for (a = 640; a > 0; a--) 21 { 22 // ClearDrawScreen(); 23 DrawLine(i++, 0, a, 480, Colors[count++ % 7]); 24 25 // ScreenFlip(); 26 } 27 i = 0; 28 for (a = 480; a > 0; a--) 29 { 30 // ClearDrawScreen(); 31 DrawLine(0, i++ ,640, a, Colors[count++ % 7]); 32 33 } 34 // } 35 // ScreenFlip(); 36 WaitKey(); 37 DxLib_End(); 38 return 0; 39}

ライブラリの説明をすると、
まず、ClearDrawScreen()は画面をクリアするので、線が残りません。
ScreenFlip()は裏画面、表画面を変える関数で、このコードでは裏画面を使っていないので意味がありません。

投稿2020/11/14 09:39

tettyA

総合スコア93

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kurira

2020/11/15 02:25

ご丁寧にありがとうございます!少々イメージとは違いましたが、自分でいくつか改造して、イメージ通りのものができました! ありがとうございます!
guest

0

DXLibではなくHTML Canvasを使ってJavaScriptで書いたのと、アニメーションさせるのは面倒だったしJavaScriptでやっても応用効かないのでやってないですが、とりあえずやりたいことはこんな感じでしょうか?
https://codepen.io/kazatsuyu/pen/ZEOwJPm

とりあえずポイントとしては、

  • 上辺を動く点と下辺を動く点が同時に動いているのに2重ループをしているのがおかしいため1重ループにした
  • 色は別々の変数に入れると扱いづらいので配列にした

というところです。

DXLibでアニメーション付きでやる場合、毎回 ClearDrawScreen() をやっているのだから当然現状のコードでは線が1本だけしか表示されないですし、そこは何か別の方法を使う必要があります。
描画バッファが1枚で、毎回スクリーンバッファへコピーしているならクリアせずに新しい線を書くという方法もありますね。
コピーではなく2枚のバッファを切り替えている(多分DXLibで特に指定しなければそれがデフォルトのはず?)場合、クリアされていない描画バッファは2フレーム前の状態のはずなので、2本同時に線を引くという手段もとれます。
あとは、ClearDrawScreen()を行うことが前提の場合、1回目の描画では1本、2回目の描画では2本、3回目は3本…のように毎回最初から描きなおすという手もあるし、線を書くスプライトを別に用意して毎回1本ずつ更新、最後にそのスプライトを描画バッファに描くという手段もとれます。

投稿2020/11/14 06:03

編集2020/11/14 06:04
kazatsuyu

総合スコア158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kurira

2020/11/14 08:21

ご回答ありがとうございます。ご提示いただいたイメージの通りにしたいです。 Javaではなく、DxLibで書かないといけないので、参考程度にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問