Измените метод movement
, чтобы просто обновить дельту
public void movement(){
x_position = x_position +10;
}
Удалите вызов movement
из вашего метода paintComponent
Обновите вас Timer
для вызова movement
method
Timer timer = new Timer(50, e -> {
canvas.movement();
canvas.repaint();
});
и как насчет операторов if, где, если версия исчезает с экрана, она возвращается к началу? я должен был бы сделать отдельный метод для проверки? и если так, я бы назвал это в графике или в таймере? Спасибо
blockquote>Вы продолжаете задавать этот вопрос, и вы продолжаете получать один и тот же ответ, я не уверен, что вы ожидаете изменить.
Я бы подумал использовать что-то вроде , например, , которое просто рисует «переполнение» изображения, чтобы заполнить оставшееся пространство, или , например, или даже , это пример , который использует
BufferedImage#getSubImage
, что, вероятно, более эффективно.Основываясь на первых двух примерах, вы также можете сделать что-то вроде ...
import java.awt.Color; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.Timer; public class Test { public static void main(String[] args) { new Test(); } public Test() { EventQueue.invokeLater(new Runnable() { @Override public void run() { BufferedImage background = new BufferedImage(800, 200, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = background.createGraphics(); g2d.setColor(Color.WHITE); g2d.fillRect(0, 0, 800, 200); g2d.setColor(Color.RED); g2d.drawLine(0, 0, 800, 200); g2d.drawLine(0, 200, 800, 0); JFrame frame = new JFrame(); frame.add(new RenderPane(background)); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } public class RenderPane extends JPanel { private BufferedImage bgMaster; private BufferedImage bgImage; private Timer timer; private double delta = 1.0; private double backgroundXPos = 0; public RenderPane(BufferedImage background) { this.bgMaster = background; bgImage = new BufferedImage(getPreferredSize().width, getPreferredSize().height, bgMaster.getType()); renderBackground(); timer = new Timer(5, new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { backgroundXPos -= delta; if (backgroundXPos + background.getWidth() < 0) { System.out.println("Reset"); backgroundXPos = 0; } renderBackground(); repaint(); } }); timer.start(); } protected void renderBackground() { Graphics2D g2d = bgImage.createGraphics(); g2d.drawImage(bgMaster, (int)backgroundXPos, 0, null); double overflow = bgMaster.getWidth() - (backgroundXPos * -1) - getWidth(); if (overflow < 0) { double overflowX = getWidth() + overflow; g2d.drawImage(bgMaster, (int)overflowX, 0, null); } g2d.dispose(); } @Override public Dimension getPreferredSize() { return new Dimension(400, 200); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g.create(); if (bgImage != null) { g2d.drawImage(bgImage, 0, 0, this); } g2d.dispose(); } } }
Это - более трудная проблема, чем Вам могло бы понравиться, поскольку анализирующий C++ может быстро стать трудной задачей. Ваш лучший выбор состоял бы в том, чтобы выбрать существующий синтаксический анализатор с хорошим интерфейсом.
Быстрый поиск нашел этот поток, который имеет много рекомендаций для синтаксических анализаторов, чтобы сделать что-то подобное.
В очень худшем Вы смогли использовать БОЛЬШОЙ ГЛОТОК-> Python и затем использовать отражение об этом для печати фиктивной реализации.
Извините это - только полуответ, но я не думаю, что существует существующий инструмент, чтобы сделать это (кроме платформы насмешки, которая является, вероятно, тем же объемом работы как использование синтаксического анализатора).
Создайте одно тестовое приложение, которое читает заголовочный файл и создает исходный файл. Тестовое приложение должно проанализировать заголовочный файл для знания имен функций.