本文整理汇总了C++中DrawingContext::get_canvas方法的典型用法代码示例。如果您正苦于以下问题:C++ DrawingContext::get_canvas方法的具体用法?C++ DrawingContext::get_canvas怎么用?C++ DrawingContext::get_canvas使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DrawingContext
的用法示例。
在下文中一共展示了DrawingContext::get_canvas方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: assert
void
TileMap::draw(DrawingContext& context)
{
// skip draw if current opacity is 0.0
if (m_current_alpha == 0.0f) return;
context.push_transform();
if (m_flip != NO_FLIP) context.set_flip(m_flip);
if (m_editor_active) {
if (m_current_alpha != 1.0f) {
context.set_alpha(m_current_alpha);
}
} else {
context.set_alpha(m_current_alpha/2);
}
const float trans_x = context.get_translation().x;
const float trans_y = context.get_translation().y;
const bool normal_speed = m_editor_active && Editor::is_active();
context.set_translation(Vector(trans_x * (normal_speed ? 1.0f : m_speed_x),
trans_y * (normal_speed ? 1.0f : m_speed_y)));
Rectf draw_rect = context.get_cliprect();
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;
std::unordered_map<SurfacePtr,
std::tuple<std::vector<Rectf>,
std::vector<Rectf>>> batches;
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*m_width + tx;
assert (index >= 0);
assert (index < (m_width * m_height));
if (m_tiles[index] == 0) continue;
const Tile& tile = m_tileset->get(m_tiles[index]);
if (g_debug.show_collision_rects) {
tile.draw_debug(context.color(), pos, LAYER_FOREGROUND1);
}
const SurfacePtr& surface = Editor::is_active() ? tile.get_current_editor_surface() : tile.get_current_surface();
if (surface) {
std::get<0>(batches[surface]).emplace_back(surface->get_region());
std::get<1>(batches[surface]).emplace_back(pos,
Sizef(static_cast<float>(surface->get_width()),
static_cast<float>(surface->get_height())));
}
}
}
Canvas& canvas = context.get_canvas(m_draw_target);
for (auto& it : batches)
{
const SurfacePtr& surface = it.first;
if (surface) {
canvas.draw_surface_batch(surface,
std::move(std::get<0>(it.second)),
std::move(std::get<1>(it.second)),
m_current_tint, m_z_pos);
}
}
context.pop_transform();
}