本文整理汇总了C++中DrawingContext::pop_transform方法的典型用法代码示例。如果您正苦于以下问题:C++ DrawingContext::pop_transform方法的具体用法?C++ DrawingContext::pop_transform怎么用?C++ DrawingContext::pop_transform使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DrawingContext
的用法示例。
在下文中一共展示了DrawingContext::pop_transform方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
void
TextObject::draw(DrawingContext& context)
{
context.push_transform();
context.set_translation(Vector(0, 0));
if(fading > 0) {
context.set_alpha((fadetime-fading) / fadetime);
} else if(fading < 0) {
context.set_alpha(-fading / fadetime);
} else if(!visible) {
context.pop_transform();
return;
}
float width = 500;
float height = 70;
Vector spos = pos + get_anchor_pos(Rectf(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT),
width, height, anchor);
context.draw_filled_rect(spos, Vector(width, height),
Color(0.6f, 0.7f, 0.8f, 0.5f), LAYER_GUI-50);
if (centered) {
context.draw_center_text(font, text, spos, LAYER_GUI-40, TextObject::default_color);
} else {
context.draw_text(font, text, spos + Vector(10, 10), ALIGN_LEFT, LAYER_GUI-40, TextObject::default_color);
}
context.pop_transform();
}
示例2: int
void
Background::draw(DrawingContext& context)
{
if(image.get() == NULL)
return;
int w = (int) image->get_width();
int h = (int) image->get_height();
int sx = int(pos.x-context.get_translation().x * speed) % w - w;
int sy = int(pos.y-context.get_translation().y * speed_y) % h - h;
int center_image_py = int(pos.y-context.get_translation().y * speed_y);
int bottom_image_py = int(pos.y-context.get_translation().y * speed_y) + h;
context.push_transform();
context.set_translation(Vector(0, 0));
for(int x = sx; x < SCREEN_WIDTH; x += w) {
for(int y = sy; y < SCREEN_HEIGHT; y += h) {
if (image_top.get() != NULL && (y < center_image_py)) {
context.draw_surface(image_top.get(), Vector(x, y), layer);
continue;
}
if (image_bottom.get() != NULL && (y >= bottom_image_py)) {
context.draw_surface(image_bottom.get(), Vector(x, y), layer);
continue;
}
context.draw_surface(image.get(), Vector(x, y), layer);
}
}
context.pop_transform();
}
示例3:
void
BadGuy::draw(DrawingContext& context)
{
if (!m_sprite.get()) return;
if (m_state == STATE_INIT || m_state == STATE_INACTIVE)
{
if (Editor::is_active()) {
m_sprite->draw(context.color(), get_pos(), m_layer);
}
}
else
{
if (m_state == STATE_FALLING) {
context.push_transform();
context.set_flip(context.get_flip() ^ VERTICAL_FLIP);
m_sprite->draw(context.color(), get_pos(), m_layer);
context.pop_transform();
} else {
m_sprite->draw(context.color(), get_pos(), m_layer);
}
if (m_glowing) {
m_lightsprite->draw(context.light(), m_col.m_bbox.get_middle(), 0);
}
}
}
示例4: draw
void ParticleSystem::draw(DrawingContext& context)
{
float scrollx = context.get_translation().x;
float scrolly = context.get_translation().y;
context.push_transform();
context.set_translation(Vector(max_particle_size,max_particle_size));
std::vector<Particle*>::iterator i;
for(i = particles.begin(); i != particles.end(); ++i) {
Particle* particle = *i;
// remap x,y coordinates onto screencoordinates
Vector pos;
pos.x = fmodf(particle->pos.x - scrollx, virtual_width);
if(pos.x < 0) pos.x += virtual_width;
pos.y = fmodf(particle->pos.y - scrolly, virtual_height);
if(pos.y < 0) pos.y += virtual_height;
//if(pos.x > virtual_width) pos.x -= virtual_width;
//if(pos.y > virtual_height) pos.y -= virtual_height;
context.draw_surface(particle->texture, pos, particle->angle, Color(1.0f, 1.0f, 1.0f), Blend(), z_pos);
}
context.pop_transform();
}
示例5: color
void
Sector::draw(DrawingContext& context)
{
context.set_ambient_color( ambient_light );
context.push_transform();
context.set_translation(camera->get_translation());
for(auto i = gameobjects.begin(); i != gameobjects.end(); ++i) {
GameObjectPtr& object = *i;
if(!object->is_valid())
continue;
if (draw_solids_only)
{
TileMap* tm = dynamic_cast<TileMap*>(object.get());
if (tm && !tm->is_solid())
continue;
}
object->draw(context);
}
if(show_collrects) {
Color color(1.0f, 0.0f, 0.0f, 0.75f);
for(auto i = moving_objects.begin(); i != moving_objects.end(); ++i) {
MovingObject* object = *i;
const Rectf& rect = object->get_bbox();
context.draw_filled_rect(rect, color, LAYER_FOREGROUND1 + 10);
}
}
context.pop_transform();
}
示例6: int
void
LevelTime::draw(DrawingContext& context)
{
context.push_transform();
context.set_translation(Vector(0, 0));
if ((time_left > TIME_WARNING) || (int(game_time * 2.5) % 2)) {
std::stringstream ss;
ss << int(time_left);
std::string time_text = ss.str();
if (time_surface)
{
float all_width = static_cast<float>(time_surface->get_width()) + Resources::normal_font->get_text_width(time_text);
context.color().draw_surface(time_surface,
Vector((static_cast<float>(context.get_width()) - all_width) / 2.0f,
BORDER_Y + 1),
LAYER_FOREGROUND1);
context.color().draw_text(Resources::normal_font, time_text,
Vector((static_cast<float>(context.get_width()) - all_width) / 2.0f + static_cast<float>(time_surface->get_width()),
BORDER_Y),
ALIGN_LEFT, LAYER_FOREGROUND1, LevelTime::text_color);
}
}
context.pop_transform();
}
示例7: draw
void ParticleSystem::draw(DrawingContext& context)
{
if(!enabled)
return;
float scrollx = context.get_translation().x;
float scrolly = context.get_translation().y;
context.push_transform();
context.set_translation(Vector(max_particle_size,max_particle_size));
for(const auto& particle : particles) {
// remap x,y coordinates onto screencoordinates
Vector pos;
pos.x = fmodf(particle->pos.x - scrollx, virtual_width);
if(pos.x < 0) pos.x += virtual_width;
pos.y = fmodf(particle->pos.y - scrolly, virtual_height);
if(pos.y < 0) pos.y += virtual_height;
//if(pos.x > virtual_width) pos.x -= virtual_width;
//if(pos.y > virtual_height) pos.y -= virtual_height;
context.color().draw_surface(particle->texture, pos, particle->angle, Color(1.0f, 1.0f, 1.0f), Blend(), z_pos);
}
context.pop_transform();
}
示例8:
void
Gradient::draw(DrawingContext& context)
{
context.push_transform();
context.set_translation(Vector(0, 0));
context.draw_gradient(gradient_top, gradient_bottom, layer, gradient_direction);
context.pop_transform();
}
示例9: Vector
void
SpecialRiser::draw(DrawingContext& context)
{
context.push_transform();
context.set_translation(
context.get_translation() + Vector(0, -32 + offset));
child->draw(context);
context.pop_transform();
}
示例10: roundf
void
TileMap::draw(DrawingContext& context)
{
// skip draw if current opacity is 0.0
if (current_alpha == 0.0) return;
context.push_transform();
if(draw_target != DrawingContext::NORMAL) {
context.push_target();
context.set_target(draw_target);
}
if(drawing_effect != 0) context.set_drawing_effect(drawing_effect);
if (editor_active) {
if(current_alpha != 1.0) {
context.set_alpha(current_alpha);
}
} else {
context.set_alpha(current_alpha/2);
}
/* Force the translation to be an integer so that the tiles appear sharper.
* For consistency (i.e., to avoid 1-pixel gaps), this needs to be done even
* for solid tilemaps that are guaranteed to have speed 1.
* FIXME Force integer translation for all graphics, not just tilemaps. */
float trans_x = roundf(context.get_translation().x);
float trans_y = roundf(context.get_translation().y);
context.set_translation(Vector(int(trans_x * speed_x),
int(trans_y * speed_y)));
Rectf draw_rect = Rectf(context.get_translation(),
context.get_translation() + Vector(SCREEN_WIDTH, SCREEN_HEIGHT));
Rect t_draw_rect = get_tiles_overlapping(draw_rect);
Vector start = get_tile_position(t_draw_rect.left, t_draw_rect.top);
Vector pos;
int tx, ty;
for(pos.x = start.x, tx = t_draw_rect.left; tx < t_draw_rect.right; pos.x += 32, ++tx) {
for(pos.y = start.y, ty = t_draw_rect.top; ty < t_draw_rect.bottom; pos.y += 32, ++ty) {
int index = ty*width + tx;
assert (index >= 0);
assert (index < (width * height));
if (tiles[index] == 0) continue;
const Tile* tile = tileset->get(tiles[index]);
assert(tile != 0);
tile->draw(context, pos, z_pos);
} /* for (pos y) */
} /* for (pos x) */
if(draw_target != DrawingContext::NORMAL) {
context.pop_target();
}
context.pop_transform();
}
示例11: Vector
void
Climbable::draw(DrawingContext& context)
{
if (climbed_by && !message.empty()) {
context.push_transform();
context.set_translation(Vector(0, 0));
Vector pos = Vector(0, SCREEN_HEIGHT/2 - Resources::normal_font->get_height()/2);
context.draw_center_text(Resources::normal_font, _(message), pos, LAYER_HUD, Climbable::text_color);
context.pop_transform();
}
}
示例12: draw
void ParticleSystem_Interactive::draw(DrawingContext& context)
{
context.push_transform();
std::vector<Particle*>::iterator i;
for(i = particles.begin(); i != particles.end(); ++i) {
Particle* particle = *i;
context.draw_surface(particle->texture, particle->pos, z_pos);
}
context.pop_transform();
}
示例13: Vector
void
Thunderstorm::draw(DrawingContext& context)
{
if (!flash_display_timer.started()) return;
float alpha = 0.33f;
context.push_transform();
context.set_translation(Vector(0, 0));
context.draw_filled_rect(Vector(0, 0), Vector(SCREEN_WIDTH, SCREEN_HEIGHT), Color(1, 1, 1, alpha), layer);
context.pop_transform();
}
示例14: Vector
void
Console::draw(DrawingContext& context)
{
if (m_height == 0)
return;
int layer = LAYER_GUI + 1;
context.push_transform();
context.set_alpha(m_alpha);
context.draw_surface(m_background2,
Vector(SCREEN_WIDTH/2 - m_background->get_width()/2 - m_background->get_width() + m_backgroundOffset,
m_height - m_background->get_height()),
layer);
context.draw_surface(m_background2,
Vector(SCREEN_WIDTH/2 - m_background->get_width()/2 + m_backgroundOffset,
m_height - m_background->get_height()),
layer);
for (int x = (SCREEN_WIDTH/2 - m_background->get_width()/2
- (static_cast<int>(ceilf((float)SCREEN_WIDTH /
(float)m_background->get_width()) - 1) * m_background->get_width()));
x < SCREEN_WIDTH;
x += m_background->get_width())
{
context.draw_surface(m_background, Vector(x, m_height - m_background->get_height()), layer);
}
m_backgroundOffset+=10;
if (m_backgroundOffset > (int)m_background->get_width()) m_backgroundOffset -= (int)m_background->get_width();
int lineNo = 0;
if (m_focused) {
lineNo++;
float py = m_height-4-1 * m_font->get_height();
context.draw_text(m_font, "> "+m_inputBuffer, Vector(4, py), ALIGN_LEFT, layer);
if (SDL_GetTicks() % 1000 < 750) {
int cursor_px = 2 + m_inputBufferPosition;
context.draw_text(m_font, "_", Vector(4 + (cursor_px * m_font->get_text_width("X")), py), ALIGN_LEFT, layer);
}
}
int skipLines = -m_offset;
for (std::list<std::string>::iterator i = m_buffer.m_lines.begin(); i != m_buffer.m_lines.end(); i++)
{
if (skipLines-- > 0) continue;
lineNo++;
float py = m_height - 4 - lineNo * m_font->get_height();
if (py < -m_font->get_height()) break;
context.draw_text(m_font, *i, Vector(4, py), ALIGN_LEFT, layer);
}
context.pop_transform();
}
示例15: draw
void ParticleSystem_Interactive::draw(DrawingContext& context)
{
if(!enabled)
return;
context.push_transform();
for(auto& particle : particles) {
context.draw_surface(particle->texture, particle->pos, z_pos);
}
context.pop_transform();
}