我想知道为什么不能绘制颜色



[我是日本人使用谷歌翻译]

表示代码是void Renderer ();函数部分,为什么我不能画颜色?我不知道原因。

addch ();函数可以正常绘制颜色

Ubuntu

操作系统:参考站点A: https://www.linuxjournal.com/content/programming-color-ncurses

参考站点B: https://www.linuxjournal.com/content/about-ncurses-colors-0

Screen.cpp

#include "../header/Screen.hpp"

#include "../header/Character.hpp"
#include "../header/Color.hpp"
#include "../header/Vector.hpp"
#include "../header/Screen.hpp"

// ######################## コンストラクタ ######################## 
Screen::Screen()
{
//ウインドウ初期化
getmaxyx(stdscr,windowSize.y,windowSize.x);
window = newpad(windowSize.y,windowSize.x);
start_color();              //カラーを有効化
prefresh(window,0,0,0,0,windowSize.y,windowSize.x);

size.x = windowSize.x;
size.y = windowSize.y;
maxSize = size.x * size.y;
stage = std::make_unique<std::vector<Character>>(size.x * size.y);

for(std::vector<Character>::iterator itr = stage->begin(); itr != stage->end(); itr++)
{
itr->chr = ' ';
itr->color = Color::NONE;
itr->type = 0;
}
}

// ######################## 画面サイズ更新 ########################
void Screen::UpdateScreen()
{
//画面サイズを取得
getmaxyx(stdscr,windowSize.y,windowSize.x);

//前のウインドウサイズをより大きければ要素を代入
if((windowSize.x * windowSize.y) > maxSize) 
{
maxSize = windowSize.x * windowSize.y;
size.x = windowSize.x;
size.y = windowSize.y;
for(int i = 0; i< (windowSize.x * windowSize.y); i++)
{
stage->emplace_back(Character{Color::NONE,' ',0});
}
}
}

// ######################## Update ########################
void Screen::Update()
{
UpdateScreen();   //画面サイズを更新
}
// ######################## 文字設定 ######################## 
void Screen::Input(int x,int y,Character c)
{
stage->at((y * size.x) + x) = c;
}
// ######################## 文字削除 ######################## 
void Screen::Delete(int x,int y)
{
stage->at((y * size.x) + x).chr = ' ';
stage->at((y * size.x) + x).color = Color::NONE;
stage->at((y * size.x) + x).type = 0;
}
// ######################## Renderer ######################## 
void Screen::Renderer()const
{
for(int y = 0; y < size.y; y++)
{
for(int x = 0; x < size.x; x++)
{
//              attron(COLOR_PAIR(stage->at((y * size.x) + x).color));
attron(COLOR_PAIR(16));
mvwaddch(window,y,x,stage->at((y * size.x) + x).chr);
//addch(stage->at((y * size.x) + x).chr);
//attrset(COLOR_PAIR(16));
//attroff(stage->at((y * size.x) + x).type);
//              attroff(COLOR_PAIR(stage->at((y * size.x) + x).color));
}
}
prefresh(window,0,0,0,0,windowSize.y,windowSize.x);      
}
// ######################## デストラクタ ######################## 
Screen::~Screen()
{

}

wattron(window,COLOR_PAIR(stage->at((y * size.x) + 
wattroff(window,COLOR_PAIR(stage->at((y * size.x) + 

在使用windows时,必须使用wattron()wattroff()函数,而不能使用attron()attroff()函数。

疑问句注释部分的代码需要对for语句进行如下修改。

for(int y = 0; y < size.y; y++)
{
for(int x = 0; x < size.x; x++)
{
wattron(window,COLOR_PAIR(stage->at((y * size.x) + x).color));
mvwaddch(window,y,x,stage->at((y * size.x) + x).chr);

wattroff(window,COLOR_PAIR(stage->at((y * size.x) + x).color));
}
}

相关内容

  • 没有找到相关文章

最新更新