描画が10秒立つと止まってしまいます。
[status.cppのworldClock()]関数で得た時間を描画していたのですが、なぜか10秒立つと止まってしまいます。(0,1,2,3,4,5,6,7,8,9という順番で描画され、最終的に9で止まってしまいます。)
[worldClock()]関数内で10秒経過したら初期化する処理を入れたのですが、その処理とは関係がありませんでした。5秒経過したら初期化に処理を書き換えても、0,1,2,3,4,0,1,2,3,4という順番で描画され最終的に4で止まってしまいました。
openglのdisplayFunc()関数
font.cppのfont_Draw()関数
status.cppのworldClock()関数
status.cppのdraw_status()関数
で処理が止まっているのかと思い、
printf関数で経過時間を描画したら、どの関数でも10秒経過以降も正常に処理されていました。
十の位を描画できないのかと思い
font_Draw()関数で
static int i=0;
i++;
で描画したら、5000ちょいまで描画できましたが、10秒立った瞬間にそれ以降は描画結果が変わりませんでした。(static int i の値はふえつづけているのに...)
動作はしているのに10秒立つととまってしまう。描画する値はふえつづけているのに...
font_Draw関数内の処理は正常なのに(10秒立っても処理は止まっていないが、10秒立つと描画がされない)、
なので、font_Draw関数になにかしらの原因があるのかと思い、色々試してみたのですががお手上げでした。
申し訳ありませんが、どこがいけないかご指摘いただければ幸いです。<(_ _)>
[status.h]
c
1#pragma once 2 3#define BUF_MAX 64 4 5class status { 6public: 7 int level = 0; 8 int nextLevel = 0; 9 int hp = 0; 10 int mp = 0; 11 int power = 0; 12 int defense = 0; 13 int speed = 0; 14 int jobCount = 0; 15 int gender = 0; 16 int intelligence = 0; 17 18 char Name[BUF_MAX] = { 0 }; 19}; 20 21class Human :public status { 22private: 23 int hour[2] = { 0 }; 24 int minute[2] = { 0 }; 25 int second[2] = { 0 }; 26public: 27 Human(); 28 void get_Name(); 29 void get_Job(); 30 31 void worldClock(); 32 void draw_status(); 33};
[status.cpp]
c
1#include <stdio.h> 2 3#include "status.h" 4#include "font.h" 5 6Human::Human() { 7 for (int i = 0; i < 2; i++) { 8 this->second[i] = 0; 9 this->minute[i] = 0; 10 this->hour[i] = 0; 11 } 12 13 this->nextLevel = 60; 14 this->level = 1; 15 this->hp = 10; 16 this->mp = 10; 17 this->power = 3; 18 this->defense = 3; 19 this->speed = 2; 20 this->jobCount = 5; 21 this->intelligence = 25; 22} 23 24void Human::get_Name() { 25 26} 27 28void Human::worldClock() { 29 static int time = 0; 30 if (time == 60) { 31 this->second[1]++; 32 time = 0; 33 } 34 if (this->second[1] == 10) 35 this->second[1] = 0; 36 37 time++; 38} 39int i = 0; 40void Human::draw_status() { 41 font_Begin(); 42 43 font_SetPosition(100, 122); 44 font_SetSize(35); 45 font_SetWidth(25); 46 font_GetColor(0x00, 0x00, 0x00); 47 font_Draw(L"%d%d:%d%d:%d%d", 48 this->hour[0], this->hour[1], 49 this->minute[0], this->minute[1], 50 i, this->second[1]); 51 i++; 52 font_SetPosition(432, 20); 53 font_SetSize(35); 54 font_SetWidth(25); 55 font_GetColor(0x00, 0x00, 0x00); 56 font_Draw(L"%d\n", this->level); 57 58 font_SetPosition(432, 55); 59 font_SetSize(15); 60 font_SetWidth(20); 61 font_GetColor(0x00, 0x00, 0x00); 62 font_Draw(L"%d\n", this->nextLevel); 63 64 font_SetPosition(100, 320); 65 font_SetSize(15); 66 font_SetWidth(20); 67 font_GetColor(0x00, 0x00, 0x00); 68 font_Draw(L"%d\n", this->power); 69 70 font_SetPosition(100, 355); 71 font_SetSize(15); 72 font_SetWidth(20); 73 font_GetColor(0x00, 0x00, 0x00); 74 font_Draw(L"%d\n", this->speed); 75 76 font_SetPosition(300, 320); 77 font_SetSize(15); 78 font_SetWidth(20); 79 font_GetColor(0x00, 0x00, 0x00); 80 font_Draw(L"%d\n", this->defense); 81 82 font_SetPosition(300, 355); 83 font_SetSize(15); 84 font_SetWidth(20); 85 font_GetColor(0x00, 0x00, 0x00); 86 font_Draw(L"%d\n", this->intelligence); 87 88 font_SetPosition(460, 320); 89 font_SetSize(15); 90 font_SetWidth(20); 91 font_GetColor(0x00, 0x00, 0x00); 92 font_Draw(L"%d\n", this->mp); 93 94 font_SetPosition(460, 355); 95 font_SetSize(15); 96 font_SetWidth(20); 97 font_GetColor(0x00, 0x00, 0x00); 98 font_Draw(L"%d\n", this->hp); 99 100 font_End(); 101}
[font.h]
c
1#define FONT_DEFAULT_SIZE 20 2 3void font_Begin(); 4void font_End(); 5 6void font_SetPosition(int _x, int _y); 7void font_SetWidth(int _width); 8void font_SetSize(int _size); 9 10int font_GetSize(); 11void font_GetColor(float red, float green,float blue); 12 13void font_Draw(const wchar_t* format, ...); 14
[font.cpp]
C
1#include <Windows.h> 2 3#include "glm/glm.hpp" 4#include "glut.h" 5 6#include "font.h" 7 8int x, y = 0; 9int width = 0; 10int size = FONT_DEFAULT_SIZE; 11float color[3] = { 0xff,0xff,0xff }; 12 13void font_Begin() { 14 glPushMatrix(); 15 glPushAttrib(GL_ALL_ATTRIB_BITS); 16 17 glMatrixMode(GL_PROJECTION); 18 glLoadIdentity(); 19 20 GLint viewport[4]; 21 glGetIntegerv(GL_VIEWPORT, viewport); 22 gluOrtho2D(0,viewport[2], viewport[3],0); 23 24 glMatrixMode(GL_MODELVIEW); 25 glLoadIdentity(); 26 27 glDisable(GL_DEPTH_TEST); 28 glDisable(GL_LIGHTING); 29 glDisable(GL_TEXTURE_2D); 30} 31 32void font_End() { 33 glPopMatrix(); 34 glPopAttrib(); 35} 36 37void font_SetPosition(int _x, int _y) { 38 x = _x + 5; 39 y = _y + 20; 40} 41 42void font_SetSize(int _size) { 43 size = _size; 44} 45 46void font_SetWidth(int _width) { 47 width = _width; 48} 49 50int font_GetSize() { 51 return size; 52} 53 54void font_GetColor(float _red, float _green, float _blue) { 55 color[0] = _red; 56 color[1] = _green; 57 color[2] = _blue; 58} 59 60void font_Draw(const wchar_t* format, ...) { 61 va_list argList; 62 63 if (format == nullptr)return; 64 65 wchar_t buf[256]; 66 va_start(argList, format); 67 vswprintf_s(buf, format, argList); 68 va_end(argList); 69 70 int length = wcslen(buf); 71 int list = glGenLists(length); 72 73 wchar_t fontType[] = { L"MS明朝" }; 74 HFONT Ofont = CreateFontW( 75 size, 76 width, 77 0, 78 0, 79 FW_REGULAR, 80 FALSE, 81 FALSE, 82 FALSE, 83 SHIFTJIS_CHARSET, 84 OUT_DEFAULT_PRECIS, 85 CLIP_DEFAULT_PRECIS, 86 DEFAULT_QUALITY, 87 FIXED_PITCH | FF_MODERN, 88 fontType); 89 90 HDC Odc = wglGetCurrentDC(); 91 SelectObject(Odc, Ofont); 92 93 wchar_t* font = buf; 94 int i = 0; 95 for (; (*font != '\0') && (*font != '\n'); font++) { 96 wglUseFontBitmapsW( 97 Odc, 98 *font, 99 1, 100 list + i 101 ); 102 i++; 103 } 104 glColor3f(color[0], color[1], color[2]); 105 glPushMatrix(); 106 { 107 glRasterPos2i(x, y); 108 for (int i = 0; i < length; i++) { 109 glCallList(list + i); 110 } 111 } 112 glPopMatrix(); 113 114 if (*font == '\n' || '\0') { 115 glDeleteLists(list, length); 116 117 font_SetPosition(0, y + font_GetSize()-15); 118 font_Draw(++font); 119 } 120} 121
[main.cpp]
opengl
1#include <stdio.h> 2#include <stdlib.h> 3 4#include "glm/glm.hpp" 5#include "glut.h" 6 7#include "rect.h" 8#include "font.h" 9#include "bmp.h" 10#include "status.h" 11 12using namespace glm; 13vec2 windowSize = { 600,400 }; 14Rect rect1 = Rect(0, 0, 600, 400); 15Human human1; 16 17void display(void) { 18 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); 19 20 glMatrixMode(GL_PROJECTION); 21 glLoadIdentity(); 22 gluOrtho2D(0, windowSize.x, windowSize.y, 0); 23 24 glMatrixMode(GL_MODELVIEW); 25 glLoadIdentity(); 26 27 human1.worldClock(); 28 rect1.rect_Draw(); 29 human1.draw_status(); 30 31 glutSwapBuffers(); 32} 33 34void idle(void) { 35 glutPostRedisplay(); 36} 37 38void reshape(int width, int height) { 39 printf("reshape: width:%d height:%d\n", width, height); 40 glViewport(0,0,width,height); 41 windowSize = vec2(width, height); 42} 43 44void motion(int x, int y) { 45 printf("x:%d y:%d\n", x, y); 46} 47 48int main(int argc, char* argv[]) { 49 glutInit( 50 &argc, 51 argv); 52 glutInitDisplayMode(GL_DOUBLE); 53 glutInitWindowPosition(100,100); 54 glutInitWindowSize(windowSize.x,windowSize.y); 55 glutCreateWindow("Window"); 56 57 bmp_Load("ステータスウィンドウ.bmp"); 58 59 glutDisplayFunc(display); 60 glutIdleFunc(idle); 61 glutReshapeFunc(reshape); 62 glutMotionFunc(motion); 63 64 glutMainLoop(); 65 66 return 0; 67}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/10 22:42 編集
2020/05/11 06:49