SDL реагирует на клавиатуру без прописанной команды

    #include <iostream>
#include <cstdlib> // для system
#include <conio.h>
#include <stdio.h>
#include <SDL.h>
#include <SDL_image.h>
#include <ctime>
#include <math.h>
#include <cmath>

using namespace std;
const double pi = 3.141592653589793238463;
double winx = 683;
double winy = 384;
double hx = winx / 2;
double hy = winy / 2;
double dim = 10;
double dot1[11] = { static_cast<double>(-2000),static_cast<double>(2300),static_cast<double>(-2000),2,3,5,5,5,5,5,5 };
double dot2[11] = { static_cast<double>(-2000),static_cast<double>(2300),static_cast<double>(2000),1,4,6,6,6,6,6,6 };
double dot3[11] = { static_cast<double>(-2000),static_cast<double>(-1700),static_cast<double>(-2000),1,4,7,7,7,7,7,7 };
double dot4[11] = { static_cast<double>(-2000),static_cast<double>(-1700),static_cast<double>(2000),2,3,8,8,8,8,8,8 };
double dot5[11] = { static_cast<double>(2000),static_cast<double>(2300),static_cast<double>(-2000),1,6,7,7,7,7,7,7 };
double dot6[11] = { static_cast<double>(2000),static_cast<double>(2300),static_cast<double>(2000),2,5,8,8,8,8,8,8 };
double dot7[11] = { static_cast<double>(2000),static_cast<double>(-1700),static_cast<double>(-2000),3,5,8,8,8,8,8,8 };
double dot8[11] = { static_cast<double>(2000),static_cast<double>(-1700),static_cast<double>(2000),4,6,7,7,7,7,7,7 };
//double dotc[11] = { static_cast<double>(0),static_cast<double>(0),static_cast<double>(0),1,2,3,4,5,6,7,8 };
/*double rectdot1[4] = { static_cast<double>(hx - dim / 2),static_cast<double>(hy - dim / 2),2,3 };
double rectdot2[4] = { static_cast<double>(hx + dim / 2),static_cast<double>(hy - dim / 2),1,4 };
double rectdot3[4] = { static_cast<double>(hx - dim / 2),static_cast<double>(hy + dim / 2),1,4 };
double rectdot4[4] = { static_cast<double>(hx + dim / 2),static_cast<double>(hy + dim / 2),2,3 };*/
//double rectcent[2] = { static_cast<double>(posx),static_cast<double>(posy) };
double* wld[9] = { dot1, dot2, dot3, dot4, dot5, dot6, dot7, dot8/*,dotc*/ };
double wldrel[9][2];
double retina = 22;
double pix = 0.252;
double newx;
double newy;
double newz;
SDL_Window* window = SDL_CreateWindow("Fade", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, winx, winy, SDL_WINDOW_SHOWN);
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
double wldgraph[9][11];
int delta = 1;
double biasm;
double ang = 0;
double globang = 0;
double d = 17;
double posx = 0;
double posy = 0;
double posz = 0;
double angx = 0;
double angy = 0;
void draw() {

    //SDL_RenderDrawPoint(renderer, posx, posy);
    //SDL_RenderDrawLine(renderer, 0, 0, posx, posy);
    //SDL_RenderDrawLine(renderer, 0, 0, rectdot1[0], rectdot1[1]);*/
    for (int i = 0;i < 9; i++) {
        double x = wldgraph[i][0];
        double y = wldgraph[i][1];
        double z = wldgraph[i][2];
        double yf = -(y * d / (x + d));
        double xf = -(z * d / (x + d));
        if (x < -d) {
            yf = -yf;
            xf = -xf;
        }
        double yff = (yf * winy * pix / retina) / pix + hy;
        double xff = (xf * winx * pix / retina) / pix + hx;

        wldrel[i][0] = xff;
        wldrel[i][1] = yff;
        /*printf("%f", xff);
        cout << endl;
        printf("%f", yff);
        cout << endl;*/
    }
    for (int i = 0;i < 9; i++) {
        double x = wldgraph[i][0];
        double y = wldgraph[i][1];
        double z = wldgraph[i][2];
        for (int q = 3;q < 11;q++) {
            double xrel = wldgraph[static_cast<int>(wldgraph[i][q] - 1)][0];
            double yrel = wldgraph[static_cast<int>(wldgraph[i][q] - 1)][1];
            double zrel = wldgraph[static_cast<int>(wldgraph[i][q] - 1)][2];

            if ((x > 0 && x / (abs(z) + d) >= d / retina && x / (abs(y) + d) >= d / retina/*|| i == 8*/)) {
                SDL_RenderDrawLine(renderer, wldrel[i][0], wldrel[i][1], wldrel[static_cast<int>(wldgraph[i][q] - 1)][0], wldrel[static_cast<int>(wldgraph[i][q] - 1)][1]);
                //SDL_RenderDrawLine(renderer, wld[i][2], wld[i][0], wld[static_cast<int>(wld[i][q] - 1)][2], wld[static_cast<int>(wld[i][q] - 1)][0]);
            }
        }
    }
}




int main(int argc, char* argv[])
{
    for (int i = 0;i < 8;i++) {
        for (int q = 0;q < 11;q++) {
            wldgraph[i][q] = static_cast<double>(wld[i][q]);
        }
    }
    if (window == nullptr) {
        std::cout << "SDL_CreateWindow Error: " << SDL_GetError() << std::endl;
        return 1;
    }
    if (renderer == nullptr) {
        std::cout << "SDL_CreateRenderer Error: " << SDL_GetError() << std::endl;
        return 1;
    }
    double biasx = 0;
    double biasz = 0;
    SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
    draw();
    SDL_RenderPresent(renderer);
    SDL_Event event;
    const Uint8* state = SDL_GetKeyboardState(NULL);
    double xmouse = 0;
    double ymouse = 0;
    while (1 == 1) {


        while (SDL_PollEvent(&event)) {
            //if (event.type == SDL_KEYDOWN) {
            //    if (state[SDL_SCANCODE_D] == 1) {
            //        biasz -= delta;
            //        delta++;
            //    }
            //    if (state[SDL_SCANCODE_A] == 1) {
            //        biasz += delta;
            //        delta++;
            //    }
            //    if (state[SDL_SCANCODE_W] == 1) {
            //        biasx += delta;
            //        delta++;
            //    }
            //    if (state[SDL_SCANCODE_S] == 1) {
            //        biasx -= delta;
            //        delta++;
            //    }

            //    posx += biasx;
            //    posz += biasz;/*
            //    for (int i = 0; i < 8; i++) {
            //        wldgraph[i][0] = wld[i][0] - posx;
            //        wldgraph[i][2] = wld[i][2] - posz;
            //    }*/
            //    biasx = 0;
            //    biasz = 0;
            //    /*if (clock() % 1000000 == 0) {
            //        delta = 1;
            //    }*/
            //    if (delta > 15) {
            //        delta = 15;
            //    }
            //}

            if (event.type == SDL_MOUSEMOTION) {
                xmouse = -event.motion.xrel;
                ymouse = event.motion.yrel;
                if (xmouse != 0) {
                    double per = xmouse / winx;
                    ang = per * 6.28;
                    angx += ang;
                    if (angx > 360 * 0.017) {
                        angx -= 360 * 0.017;
                    }
                    if (angx < 360 * 0.017) {
                        angx += 360 * 0.017;
                    }

                }
                /*if (ymouse != 0) {
                    double per = ymouse / winy;
                    double ang = per * 6.28;
                    for (int i = 0;i < 8;i++) {
                        float y = wld[i][1];
                        float x = wld[i][0];
                        double angb = atan2(x, y);
                        double ang1 = angb - ang;
                        globang += ang1;
                        double r = sqrt(pow(x, 2) + pow(y, 2));
                        float newx = r * sin(ang1);
                        float newy = r * cos(ang1);
                        wld[i][0] = newx;
                        wld[i][1] = newy;
                    }
                }*/
            }
            for (int i = 0; i < 8; i++) {
                /*wldgraph[i][0] = wld[i][0] - posx;
                wldgraph[i][2] = wld[i][2] - posz*/;
                double x = wldgraph[i][0];
                double z = wldgraph[i][2];
                double angb = atan2(z, x);
                double ang1 = angb - ang;
                double r = sqrt(pow(x, 2) + pow(z, 2));
                newz = r * sin(ang1);
                newx = r * cos(ang1);
                wldgraph[i][0] = newx;
                wldgraph[i][2] = newz;
            }

            SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
            SDL_RenderClear(renderer);
            SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
            draw();
            SDL_RenderPresent(renderer);
        }

    }
}

Это полный файл Проблема возникает на этом участке кода:

if (event.type == SDL_MOUSEMOTION) {
                    xmouse = -event.motion.xrel;
                    ymouse = event.motion.yrel;
                    if (xmouse != 0) {
                        double per = xmouse / winx;
                        ang = per * 6.28;
                        angx += ang;
                        if (angx > 360 * 0.017) {
                            angx -= 360 * 0.017;
                        }
                        if (angx < 360 * 0.017) {
                            angx += 360 * 0.017;
                        }

                    }
                    /*if (ymouse != 0) {
                        double per = ymouse / winy;
                        double ang = per * 6.28;
                        for (int i = 0;i < 8;i++) {
                            float y = wld[i][1];
                            float x = wld[i][0];
                            double angb = atan2(x, y);
                            double ang1 = angb - ang;
                            globang += ang1;
                            double r = sqrt(pow(x, 2) + pow(y, 2));
                            float newx = r * sin(ang1);
                            float newy = r * cos(ang1);
                            wld[i][0] = newx;
                            wld[i][1] = newy;
                        }
                    }*/
                }
                for (int i = 0; i < 8; i++) {
                    /*wldgraph[i][0] = wld[i][0] - posx;
                    wldgraph[i][2] = wld[i][2] - posz*/;
                    double x = wldgraph[i][0];
                    double z = wldgraph[i][2];
                    double angb = atan2(z, x);
                    double ang1 = angb - ang;
                    double r = sqrt(pow(x, 2) + pow(z, 2));
                    newz = r * sin(ang1);
                    newx = r * cos(ang1);
                    wldgraph[i][0] = newx;
                    wldgraph[i][2] = newz;
                }       

Как видите, там прописано некое изменение переменных, но ели запустить этот код, то тоже самое изменение будет совершаться если нажать на любую кнопку клавиатуры. Я даже закомментировал фрагмент, обрабатывающий нажатия на клавиатуру. Если же цикл занести в это условие: if (event.type == SDL_MOUSEMOTION), то реакции на клавиши нет. В чем проблема? Ожидается: переменные wldgraph[i][0] и wldgraph[i][2] будут изменяться если я повожу мышкой по окну. Результат: переменные изменяются как при движении мыши, так и при нажатии на клавишу и видимо любого SDL_Event


Ответы (0 шт):