質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

Q&A

解決済

1回答

197閲覧

動作の繰り返しの方法

rsetuhbcln

総合スコア13

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

0グッド

1クリップ

投稿2017/11/14 07:23

編集2017/12/12 07:05

###前提・実現したいこと
現在、ボールを放物線のように飛ばし、カゴにボールを入れるゲームを作っています。

###発生している問題・エラーメッセージ
今、ボールを放物線で飛ばし、ボールを初期位置まで戻すことはできたのですが、初期位置に戻ってから動かすことができません。
どのようにすれば、繰り返しボールを飛ばすことができますか?教えてください。

エラーメッセージ

###該当のソースコード
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing.Drawing2D;

namespace _1108_ボール_斜方投射
{
public partial class Formballshoot : Form
{

double ballPos_x; double ballPos_y; double vx = 15;     //x座標の初速度 double vy = -30;     //y座標の初速度 double g = 1.0;      //加速度 int ballRadius = 10;   //ボールの半径 Timer timer = new Timer(); public Formballshoot() { this.ballPos_x = 10; //x座標の初期位置 this.ballPos_y = 650; //y座標の初期位置 InitializeComponent(); Timer timer = new Timer(); timer.Interval = 50; timer.Tick += new EventHandler(Update); timer.Start(); } private void Update(object sender, EventArgs e) { ballPos_x += vx; vy += g; ballPos_y += vy; //再描写 Invalidate(); //ボールが画面の下を超えた場合 if (ballPos_y > 650) { this.ballPos_x = 10; //x座標の初期位置に戻す this.ballPos_y = 650; //y座標の初期位置に戻す timer.Stop(); } } private void DrawFiguare(object sender, PaintEventArgs e) { e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; //円を描画する SolidBrush brush = new SolidBrush(Color.Red); float px = (float)this.ballPos_x - this.ballRadius; float py = (float)this.ballPos_y - this.ballRadius; e.Graphics.FillEllipse(brush, px, py, this.ballRadius * 2, this.ballRadius * 2); } private void endEToolStripMenuItem_Click(object sender, EventArgs e) { //ゲーム終了 Close(); } }

}

###試したこと
timerを2つ用いてやってみたのですが、ボールの動きが、連続的にならず、飛び飛びになり上手くいきませんでした。

###補足情報(言語/FW/ツール等のバージョンなど)
C# windowsForm

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ぱっと見vyの値がリセットされてないので
初期位置に戻った直後にまたリセット条件に引っかかってを繰り返してそうです

投稿2017/11/14 13:49

ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rsetuhbcln

2017/11/15 05:36

xyの値をリセットできればいいって事ですか?
ozwk

2017/11/15 05:44

vyです。y方向の速度。
rsetuhbcln

2017/11/16 05:03

できました! ありがとうございます!
ozwk

2017/11/27 08:01

今更ですし前提ひっくり返す提案なんですが、 WinFormにこだわりがないなら Unity使って作ったほうが圧倒的に楽だと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問