首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FLTK简单动画

FLTK简单动画
EN

Stack Overflow用户
提问于 2012-05-28 14:54:38
回答 1查看 6.5K关注 0票数 2

我可以成功地编译并运行Hello代码。现在我想做一些像动画一样的事情。

我首先创建一个矩形类,以实现从Fl::小部件中提取()

代码语言:javascript
复制
class myRect: public Fl_Widget {
private:
    Fl_Color color;
    void draw(){
        fl_color(color);
        fl_rectf(x(),y(),w(),h(),color);
    }
public:
    myRect(int X,int Y,int W,int H, Fl_Color c) : Fl_Widget(X,Y,W,H),color(c) {}
};



int main (int argc, char ** argv)
{
    Fl_Window *window = new Fl_Window (300, 180, "FLTK Test");

    vector<myRect*> allRect;
    for(int i=0; i<10; ++i){
        allRect.push_back(new myRect ((i*10)%100,100,50,50,i%256));
    }
    window->end();
    window->show();

    return Fl::run();
}

上面的代码可以像我预期的那样运行。但是现在我想一个一个地显示矩形,有一些时间间隔,比如1秒。就像动画一样。

我看过这份正式文件,但对此我仍然没有什么想法。请给我一些信息。谢谢!!

多亏了DejanLekic,我将代码修改如下:

代码语言:javascript
复制
#include <iostream>
#include <vector>
#include <FL/Fl.H>
#include <FL/Fl_Widget.H>
#include <FL/Fl_Double_Window.H>
#include <FL/fl_draw.H>

using namespace std;

class myRect: public Fl_Widget {
private:
    Fl_Color color;
    void draw(){
    fl_color(color);
    fl_rectf(x(),y(),w(),h(),color);
}

public:
    myRect(int X,int Y,int W,int H, Fl_Color c)
        :Fl_Widget(X,Y,W,H),color(c) {}
};

vector<myRect*> allRect;

void winUpdate(void *data)
{
    static unsigned i = 0;
    Fl_Double_Window *o = (Fl_Double_Window*)data;
    if(i < allRect.size()){
        o->add(allRect[i]);
        if(i>=3) o->remove(allRect[i-3]);
        o->redraw();
        Fl::add_timeout(0.5,winUpdate,data);
        ++i;
    }
}

int main (int argc, char ** argv)
{
    for(int i=0; i<8; ++i){
        allRect.push_back(new myRect(i*30,i*30,50,50,i));
    }
    Fl_Double_Window *window = new Fl_Double_Window (400, 400, "FLTK Test");
    Fl::add_timeout(2,winUpdate,window);
    window->end();
    Fl::visual(FL_DOUBLE|FL_INDEX);
    window->show();
    return Fl::run();
}

它似乎运行得很好,但我不确定它是否正确。如果有什么问题,请告诉我。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-28 18:01:54

科里,你走对了路。

下面是一个完整的示例,如何使用FLTK的绘图功能制作一个简单的2D动画:http://seriss.com/people/erco/fltk/#AnimateDrawing

使用OpenGL:http://seriss.com/people/erco/fltk/#OpenGlInterp类似的东西

在两个示例中,关键都在Fl::add_timeout(0.25, Timer_CB, (void*)this);行和Timer_CB()静态(回调)方法中。这两个例子都是好的和容易的,我相信你会立即理解他们。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10786612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档