49110


ゲーム数学なのですが、"30度の角度に一定数動いたあとそのまま角度を保って元の最初の  
場所にブロック移動させる(戻る)"という処理を書きたいのですが実装に困ってまして  
/ _ここです_
/の部分に書いてある条件の処理は完成したのですがそれをどこに書いたらいいかがわかりません、while文のように元の座標まで無限ループするとそこに処理が停滞してしますので  
画面のブロックが消えてしまうので実装に困っています、どうすればいいのか教えてくれますでしょうか？

[code]

                #include "DxLib.h"
            #include "math.h"
            //#include <iostream>
            constexpr double PI = 3.141592654;
            int Key[256];
            int gpUpdateKey()
            {
                char tmpkey[256];
                GetHitKeyStateAll(tmpkey);
                for (int i = 0; i < 256; i++)
                {
                    if (tmpkey[i] != 0) {
                        Key[i]++;
                    }
                    else {
                        Key[i] = 0;
                    }
                }
                return 0;
            }
    
            /*ハンドル*/
            //x:48  y : 64
            //ウインドウサイズ x:640 y:480
            //int pos_x = (640 / 2) - (48 / 2);
            //int pos_y = (480 / 2) - (64 / 2);
    
            int pos_x = 100;
            int pos_y = 380;
    
            int x = pos_x;
            int y = pos_y;
            int Select = 0;
    
            int Count = 0;
            int color;
            int hResource;
            int hBall;
            int hCharacter[16];
    
            int xx = pos_x;
            int yy = pos_y;
    
            typedef struct
            {
                int x;
                int y;
                char name[128];
            }Menu_t;
    
            Menu_t SelectMenu[3] = {
                {200,50,"ゲーム開始"},
                {100,100,"コンテニュー"},
                {100,150,"終了"},
            };
    
            /*計算*/
            void Calc();
            void Calc() {
    
    
    
            }
    
    
    
    
            void end() {
    
            }
    
            int WINAPI WinMain(HINSTANCE hInstanve, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
            {
                ChangeWindowMode(true), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK);
                color = GetColor(0, 255, 0);
                hResource = LoadGraph("Resource.png");
                hBall = LoadGraph("Ball.png");
                hCharacter[16] = { 0 };
                int hBlock = LoadGraph("Block.png");
                LoadDivGraph("char.png", 16, 4, 4, 32, 32, hCharacter);
                int color = GetColor(255,255,255);
    
    
                double angle = PI * 2 / 8;
                while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && gpUpdateKey() == 0) {
    
                    //DrawGraph(x,y,hBlock,TRUE);
    
                    DrawGraph(pos_x, pos_y, hBlock, TRUE);
    
    
                    pos_x += 2 * cos(0.0174533 * 30);
                    pos_y -= 2 * sin(0.0174533 * 30);
    
                        /*このコード*/
                ////////////////////////////////////////////
                    //if (pos_x >200 && pos_y < 100) {
                    //  //break;
                    //while(pox_x != xx && pos_y != yy)
                    //  if (pos_x != xx && pos_y != yy) {
                    //      pos_x -= 2 * sin(0.0174533 * 30);
                    //      pos_y += 2 * cos(0.0174533 * 30);
    
    
                    //  }
    
                    //}
                ////////////////////////////////////////////
    
                    //break;
    
            //      Calc();
            //      xx += 2 * cos(0.0174533 * 30);
            //      yy -= 2 * sin(0.0174533 * 30);
    
    
                    DrawFormatString(0,0,color,"pos_x:%d",pos_x);
                    DrawFormatString(0,15, color,"pos_y:%d", pos_y);
                //  WaitTimer(20);
    
                    //Graphic_Draw();       
                }
    
                if (CheckHitKey(KEY_INPUT_ESCAPE) == 1 || CheckHitKey(KEY_INPUT_RETURN) == 1) {
                    exit(1);
                }
                WaitKey();
                return 0;
            }
    
[/code]


CC BY-SA 4.0
2018-10-09T10:56:17.633
49109
2018-10-09T11:14:06.387
question
c++
ループ処理の上でコーディングに迷ってます。dxライブラリ


とりあえずですが、以下のコードで実現できると思います

[code]

            int direction = 1;
    
            while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && gpUpdateKey() == 0) {
    
                //DrawGraph(x,y,hBlock,TRUE);
    
                DrawGraph(pos_x, pos_y, hBlock, TRUE);
    
    
    
                pos_x += 2 * cos(0.0174533 * 30) * direction;
                pos_y -= 2 * sin(0.0174533 * 30) * direction;
    
                if(pos_x >200 && pos_y < -100)
                {
                    direction = -1;
                }
                if(pos_x <0 && pos_y > 0)
                {
                    direction = 1;
                }
    
                DrawFormatString(0,0,color,"pos_x:%d",pos_x);
                DrawFormatString(0,15, color,"pos_y:%d", pos_y);
            }
    
[/code]

キャラクターが増えてくると管理が大変になってくるので、キャラクターごとにクラス分けしてinstanceごとに計算するようにした方が後々いいと思います。


CC BY-SA 4.0
2018-10-09T11:14:06.387
49110
2018-10-09T11:14:06.387
17014
49109
answer