示例#1
0
//--------------------------------------------------------------
// set dimensions of image
void mgXPSurface::resizeSingleImage(
  int width,
  int height)
{
  m_imageWidth = width;
  m_imageHeight = height;

  // delete the old bitmap, different size
  if (m_surfaceBitmap != NULL)
  {
    SelectObject(m_surfaceDC, (HBITMAP) NULL);
    DeleteObject(m_surfaceBitmap);
    m_surfaceBitmap = NULL;

    SelectObject(m_alphaDC, (HBITMAP) NULL);
    DeleteObject(m_alphaBitmap);
    m_alphaBitmap = NULL;
  }

  // create bitmap info header 
  BITMAPINFO *pInfo = (BITMAPINFO *) new char[sizeof(BITMAPINFOHEADER)];

  pInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
  pInfo->bmiHeader.biPlanes = 1;
  pInfo->bmiHeader.biBitCount = 32;
  pInfo->bmiHeader.biCompression = BI_RGB;
  pInfo->bmiHeader.biSizeImage = 0;
  pInfo->bmiHeader.biClrUsed = 0;
  pInfo->bmiHeader.biClrImportant = 0;

  pInfo->bmiHeader.biWidth = m_imageWidth;
  pInfo->bmiHeader.biHeight = -m_imageHeight;

  void *pData;
  m_surfaceBitmap = CreateDIBSection(m_surfaceDC, pInfo, DIB_PAL_COLORS, &pData, NULL, 0);
  m_surfaceData = (BYTE*) pData;
  SelectObject(m_surfaceDC, m_surfaceBitmap);

  m_alphaBitmap = CreateDIBSection(m_alphaDC, pInfo, DIB_PAL_COLORS, &pData, NULL, 0);
  m_alphaData = (BYTE*) pData;
  SelectObject(m_alphaDC, m_alphaBitmap);

  delete pInfo;

  deleteTiles();

  m_horzTiles = 1;
  m_vertTiles = 1;

  m_tiles = new mgTextureImage*[1];
  m_tiles[0] = mgDisplay->createTextureMemory(m_imageWidth, m_imageHeight,
                      MG_MEMORY_FORMAT_BGRA, m_inworld);
}
示例#2
0
//--------------------------------------------------------------
// set dimensions of image
void mgTextureSurface::resizeSingleImage(
    int width,
    int height)
{
    deleteTiles();

    m_horzTiles = 1;
    m_vertTiles = 1;

    m_tiles = new mgTextureImage*[1];
    m_tiles[0] = mgDisplay->createTextureMemory(width, height,
                 MG_MEMORY_FORMAT_BGRA, m_inworld);
}
示例#3
0
//--------------------------------------------------------------
// destructor
mgXPSurface::~mgXPSurface()
{
  deleteTiles();

  // delete the surface bitmap
  if (m_surfaceBitmap != NULL)
  {
    DeleteObject(m_surfaceBitmap);
    m_surfaceBitmap = NULL;
  }

  // delete the surface DC
  SelectObject(m_surfaceDC, (HBITMAP) NULL);
  SelectObject(m_surfaceDC, (HFONT) NULL);
  SelectObject(m_surfaceDC, (HBRUSH) NULL);
  SelectObject(m_surfaceDC, (HPEN) NULL);
  DeleteDC(m_surfaceDC);

  // delete the alpha bitmap
  if (m_alphaBitmap != NULL)
  {
    DeleteObject(m_alphaBitmap);
    m_alphaBitmap = NULL;
  }

  // delete the alpha DC
  SelectObject(m_alphaDC, (HBITMAP) NULL);
  SelectObject(m_alphaDC, (HFONT) NULL);
  SelectObject(m_alphaDC, (HBRUSH) NULL);
  SelectObject(m_alphaDC, (HPEN) NULL);
  DeleteDC(m_alphaDC);

  // delete the cached drawing objects
  deleteFonts();
  deleteBrushes();
  deletePens();
}
示例#4
0
//--------------------------------------------------------------
// destructor
mgTextureSurface::~mgTextureSurface()
{
    deleteTiles();
}
示例#5
0
文件: base.cpp 项目: ohargro/capstone
void editLevelScreen()
{
    int currentType = TILE_RED;
    showType(currentType);

    Tile *tiles[TOTAL_TILES];

    if(loadTiles(tiles) == false)
    {
        cleanUp();
        exit(0);
    }

    while(true)
    {
        fps.start();

        while(SDL_PollEvent(&event))
        {
            //When the user clicks
            if( event.type == SDL_MOUSEBUTTONDOWN )
            {
                //Put the tile
                putTile( tiles, currentType );
            }

            if (event.type == SDL_KEYDOWN)
            {
                switch(event.key.keysym.sym)
                {
                    case SDLK_1:
                    case SDLK_q:
                    {
                        //Scroll forward through tiles
                        currentType--;

                        if( currentType < TILE_RED )
                            currentType = TILE_TOPLEFT;

                        //Show the current tile type
                        showType( currentType );
                        break;
                    }
                    case SDLK_2:
                    case SDLK_w:
                    {
                        //Scroll backward through tiles
                        currentType++;

                        if( currentType > TILE_TOPLEFT )
                            currentType = TILE_RED;

                        //Show the current tile type
                        showType( currentType );
                        break;
                    }

                    case SDLK_s:
                    {
                        // save the tiles and display a "saved" message
                        saveTiles(tiles);
                        SDL_Color savedMessageColor = {255, 255, 255};
                        SDL_Surface* savedMessage = NULL;
                        savedMessage = load_font("eva.ttf", "SAVED", savedMessageColor, 24);
                        apply_surface(1, 1, savedMessage, screen);
                        SDL_Delay(500);
                        SDL_FreeSurface(savedMessage);
                        break;
                    }
                    case SDLK_BACKSPACE:
                    {
                        deleteTiles(tiles);
                        startScreen();
                        break;
                    }
                    default:;
                }
            }

            myWindow.handle_window();
            handleMusic();

            if( event.type == SDL_QUIT )
            {
                //Quit the program
                deleteTiles(tiles);
                cleanUp();
                exit(0);
            }
        }

        if (myWindow.error())
        {
            cleanUp();
            exit(0);
        }

        setEditorCamera();

        for (int t = 0; t < TOTAL_TILES; t++)
            tiles[t]->show();

        if (SDL_Flip(screen) == -1)
        {
            cleanUp();
            exit(0);
        }

        //Cap the frame rate
        if( fps.get_ticks() < 1000 / FRAMES_PER_SECOND )
        {
            SDL_Delay( ( 1000 / FRAMES_PER_SECOND ) - fps.get_ticks() );
        }
    }
}
示例#6
0
文件: base.cpp 项目: ohargro/capstone
void theGame()
{
    SDL_WM_SetCaption("WASD: Move, BACKSPACE: Start Screen, ENTER: Fullscreen", NULL);
    Sprite mew("testChar2.png", 32, 156, 0); //load mew and set R 32, G 156, B 0 to be transparent.  Set width to 33 and height to 69

    Tile *tiles[TOTAL_TILES];
    Enemy *enemies[TOTAL_ENEMIES];

    enemies[0] = new Enemy(225, 0, ENEMY_ROBOT);
    enemies[0]->setVelX(50);

    enemies[1] = new Enemy(225, 0, ENEMY_ROBOT);
    enemies[1]->setVelX(100);

    enemies[2] = new Enemy(225, 0, ENEMY_ANDROID);
    enemies[2]->setVelX(-75);

    bool playing = true;

    if(setTiles(tiles) == false)
    {
        cleanUp();
        exit(0);
    }

    //game loop
    delta.start();
    while(playing)
    {
        fps.start();
        while(SDL_PollEvent(&event))
        {
            mew.handle_input();
            myWindow.handle_window();
            handleMusic();

            if(event.key.keysym.sym == SDLK_BACKSPACE)
            {
                deleteTiles(tiles);
                deleteEnemies(enemies);
                startScreen();
            }
            if(event.type == SDL_QUIT)
                playing = false;
        }
        if (myWindow.error())
        {
            cleanUp();
            exit(0);
        }

        mew.move(delta.get_ticks(), tiles, enemies);

        for (int e = 0; e < TOTAL_ENEMIES; e++)
        {
            enemies[e]->walk(delta.get_ticks(), tiles);
        }

        delta.start(); //restart delta after movement
        mew.setCamera();

        for( int t = 0; t < TOTAL_TILES; t++ )
            tiles[t]->show();
        mew.show();
        for (int e = 0; e < TOTAL_ENEMIES; e++)
            enemies[e]->show();

        if(SDL_Flip(screen) == -1)
        {
            cleanUp();
            exit(0);
        }

        if(fps.get_ticks() < (1000 / FRAMES_PER_SECOND))
            SDL_Delay(1000 / FRAMES_PER_SECOND - fps.get_ticks());

    }

    deleteTiles(tiles);
    deleteEnemies(enemies);
    exit(0);
}